Herkese selamlar tiva c series tm4c1294xl launchpad im var adc uygulaması (işlemcinin içinde bulunan dahili sıcaklık sensöründen veri almak istiyorum ) yapmak istiyorum fakat işlemci while(!ADCIntStatus(ADC0_BASE, 3, false)){} döngüsünde takılıp kalıyor.Keil uvision 5 derleyicisini kullanıyorum . while döngüsünü kaldırdığımda ise ui32TempValueC değişkeninin ilk değeri dönüyor ve hep aynı değer dönüyor . Bir türlü sıcaklık değerini okuyamıyorum ne terminalden ne de debug işleminde .
Sizce sorun ne olabilir?
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_ints.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/uart.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/adc.h"
#include "utils/uartstdio.h"
#include "utils/uartstdio.c"
void
InitConsole(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
UARTStdioConfig(0, 115200, 16000000);
}
int
main(void)
{
uint32_t pui32ADC0Value;
uint32_t ui32TempValueC;
uint32_t ui32TempValueF;
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
InitConsole();
UARTprintf("ADC ->\n");
UARTprintf(" Type: Internal Temperature Sensor\n");
UARTprintf(" Samples: One\n");
UARTprintf(" Update Rate: 250ms\n");
UARTprintf(" Input Pin: Internal temperature sensor\n\n");
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ADCSequenceDisable(ADC0_BASE,3);
ADCHardwareOversampleConfigure(ADC0_BASE,64);
ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_TIMER, 1);
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS |
ADC_CTL_END);
ADCSequenceEnable(ADC0_BASE, 3);
ADCIntClear(ADC0_BASE, 3);
IntEnable(INT_ADC0SS3);
while(1)
{
ADCProcessorTrigger(ADC0_BASE, 3);
while(!ADCIntStatus(ADC0_BASE, 3, false))
{
}
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value);
ui32TempValueC=147.5 - ((75*(3.3)*pui32ADC0Value) / 4096);
ui32TempValueF = ((ui32TempValueC * 9) + 160) / 5;
UARTprintf("Temperature = %3d*C or %3d*F\r", ui32TempValueC,
ui32TempValueF);
SysCtlDelay(100000);
}
}
Sorunu buldum arkadaslar bu launchpad te sistem clock u ayarları diğer tiva c series lerden farklıymış .
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); satırı yerine ,
SysCtlClockFreqSet(SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_320,16000000); satırı gelmesi gerekiyor.