This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

unable to use adc1 in interrupt mode in stm32fx103rbt6

Hi, i am unable to use the adc in interrupt mode. following is the adc intialisation i have done. I am using adc 1 channel 14. I have added a IRQ handler :
/////////////////////////////////////////////////// void ADC_IRQHandler (void){ //fetch the value dataReg = (UNSIGNED16)ADC1->DR; dataReg++;

}
///////////////////////////////////////////////////

void adc_Init (void) {

// ptr = ADC_IRQHandler; RCC->APB2ENR |= (1<<9); /* enable periperal clock for ADC1 */

ADC1->SQR1 = 0x00000000; /* 1 conversions */ //ADC1->SQR1 |= 14<<5; ADC1->SQR3 = 14<<0;//(3<<10) | (2<<5) | (1<<0); /* set order to chn14 */ ADC1->SMPR2 = (5<< 9) | (5<<6) | (5<<3); /* set sample time (55,5 cycles) */

ADC1->CR1 = 0x00000100; /* use independant mode, SCAN mode */ ADC1->CR1 |= 1<<5; /* enable end of conversion interrupt */ ADC1->CR2 = 0x000E0000; /* data align right, cont. conversion */ ADC1->CR2 |= 0x0000001; /* data align right, cont. conversion */ /* EXTSEL = SWSTART */ /* enable ADC, No DMA mode */ ADC1->CR2 |= 0x00500000; /* start SW conversion */ }

///////////////////////
The entry of this IRQ is present in the stm32f10x.s file. when EOC bit gets set in the simulator my IRQ function does not get called.
Has any body used this functionality, if you have a sample project can you please mail it to me . my mail id is rohitd@kpitcummins.com .
we are using stm32fx103rbt6 processor.

thanks and regards
rohit

Parents
  • Hello Rohit Deshpande,

    In your void adc_init(void) function you must configure ADC1->SMPR1 to set the sample time for channel 14.
    If you want to use the ADC Interrupt you must enable it in the NVIC NVIC->ISER[0] |= (1 << ADC1_2_IRQChannel);.
    Please see also Chap 5 Exceptions & Chap 8 Nested Vectored Interrupt Controller of the ARM Cortex-M3 Technical Reference Manual.

    You could take a look at the Blinky example in C:\Keil\ARM\Boards\Keil\MCBSTM32E\Blinky. This example uses also ADC channel 14 in interrupt mode.

    Best Regards,
    Martin Guenther

Reply
  • Hello Rohit Deshpande,

    In your void adc_init(void) function you must configure ADC1->SMPR1 to set the sample time for channel 14.
    If you want to use the ADC Interrupt you must enable it in the NVIC NVIC->ISER[0] |= (1 << ADC1_2_IRQChannel);.
    Please see also Chap 5 Exceptions & Chap 8 Nested Vectored Interrupt Controller of the ARM Cortex-M3 Technical Reference Manual.

    You could take a look at the Blinky example in C:\Keil\ARM\Boards\Keil\MCBSTM32E\Blinky. This example uses also ADC channel 14 in interrupt mode.

    Best Regards,
    Martin Guenther

Children
  • Hi all,

    Sorry Andy , yes i agree with john , i understand we come from two different cultures and nations too, and may be the case i took a wrong meaning out of the comments given by ANDY.

    I do understand that sending source code to my mail ID is too selfish , but my feeling behind asking for the source was because i thought no one would post the complete code over here in the forum.

    Sorry again for being too rude.

    I had intialised all the registers but still the interrupt was not getting generated, I was able to set a particular bit in the check box (of keil simulator)
    and then the interrupt would occur,but i was not uderstanding the location of this bit (In register).

    as told by marting and andy i tried looking in to the NVIC bits and my issue got solved.

    Thanks forum for helping me out of this issue ,and extremly sorry for being rude , and certainly this wont happen in future.

    Thanks and regards
    Rohit Deshpande