flowchartx
Aktif Üye
- Katılım
- 18 Ağustos 2021
- Mesajlar
- 219
Herkese merhabalar, arm mimarisinde tek adc 3 channel bir sensör okuması için yazılmış bir kodu tartışıyorduk. Bazı kişiler iyi bazı kişiler çok dolambaçlı diyor. Ama kod doğru çalıştığı söylendi sizinde fikrinizi merak ettim
ADC KESMESİ:
void ADC_IRQHandler()
{
if(ADC1->ISR & 0x0004)
{
datas[AdcReadNumber] += ADC1->DR;
counter++;
if(counter > 50)
{
ADC_Done=1;
counter=0;
ADC1->CR = 1<<4; // ADC KAPATILIR
}
else
{
// ADC_Status=0;
}
ADC1->ISR &= ~0x0004; // BAYRAĞI INDIR
}
}
ADC UPTADE:
uint8_t UpdateADC(void)
{
switch(AdcReadNumber)
{
case 0:
ADC1->CHSELR = 0x0000;
ADC1->CHSELR |= (1<<4) ;
break;
case 1:
ADC1->CHSELR = 0x0000;
ADC1->CHSELR |= (1<<5);
break;
case 2:
ADC1->CHSELR = 0x0000;
ADC1->CHSELR |= (1<<6);
break;
}
ADC1->CR |= 0<<1;
// ADC1->CR |= 0x0001;
ADC1->CR |= 1<<2;
ADC1->ISR |= 0x0001;
return 1;
}
READ_ADC:
uint8_t Read_ADC(void)
{
switch(AdcReadNumber)
{
case 0:
Sensor1 = datas[0] / 50;
break;
case 1:
Sensor2 = datas[1] / 50;
break;
case 2:
Sensor3 = datas[2] / 50;
break;
}
AdcReadNumber++;
if(AdcReadNumber == 3)
{
AdcReadNumber=0;
}
return 1;
}
WHILE:
if(ADC_Done)
{
ADC_Done=0;
while(Read_ADC() != 1);
UpdateADC();
}