ADC Interrupt

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
chyi_4662656
Level 2
Level 2
5 replies posted First question asked First reply posted

嗨,請問一個關於ADC Interrupt的問題,程式ADC的通道(CH0)只有一個,

為什麼ADC轉換完畢後,程式都會重複進入ADC中斷一次?

(我預期的程式為ADC轉換完畢後只會進入一次ADC中斷)

附上我的程式流程、執行結果與程式檔案。

提供程式流程:

Step1.  程式初始化時,我會執行ADC_Start(); ADC_IRQ_ENABLE();

Step2. Timer產生中斷後會執行ADC_StartConvert()GPIO訊號(藍色波形)反向 

一次確認已進入Timer中斷。

Step3.  ADC轉換完畢後會進入ADC中斷,將運算結果取出後,清除旗標,

GPIO訊號(紅色波形)反向一次確認已進入ADC中斷。

               

                CY_ISR(ADC_ISR)

                {

                        Uint32 intr_status;

                        Intr_status = MotorCur_ADC_SAR_INTR_REG;             

                        //執行GPIO 訊號反向

                        //讀取ADC結果

                        ADC_StopConvert();

                        ADC_SAR_INTR_REG=intr_status;

}

Step4.  等待Timer中斷產生。

提供示波器波形:

  未命名.jpg

0 Likes
1 Solution
Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

SARADC 的工作模式是 continuous 模式,ADC 在执行完一次转换之后会直接进入下一次转换(不需要CPU干预),虽然你在 ADC EOS 中断中第一时间调用了 StopConvert(), 但是此时 ADC 已经开始了第二次扫描,所以ADC每次实际执行了两次转换。

如果你希望每次都是单次转换的话,你需要把工作模式修改为 Hardware trigger 模式。这样每调用一次 StartConvert() 函数, ADC 会执行一次采样,然后自动停止。这样你也不需要再ADC 中断中再调用 StopConvert() 来停止 ADC 采样了。

Note: Hardware Trigger - A rising-edge pulse on the SOC pin starts a single conversion. The ADC_StartConvert() function also starts a single conversion

View solution in original post

0 Likes
2 Replies
LinglingG_46
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 10 questions asked

I need some time to review and test your code, and give the feedback to you ASAP.

You could try to use the hardware trigger sample mode instead of the free running, and use the timer OV to trigger the ADC convention.

Vison_Zhang
Moderator
Moderator
Moderator
First comment on KBA 750 replies posted 250 sign-ins

SARADC 的工作模式是 continuous 模式,ADC 在执行完一次转换之后会直接进入下一次转换(不需要CPU干预),虽然你在 ADC EOS 中断中第一时间调用了 StopConvert(), 但是此时 ADC 已经开始了第二次扫描,所以ADC每次实际执行了两次转换。

如果你希望每次都是单次转换的话,你需要把工作模式修改为 Hardware trigger 模式。这样每调用一次 StartConvert() 函数, ADC 会执行一次采样,然后自动停止。这样你也不需要再ADC 中断中再调用 StopConvert() 来停止 ADC 采样了。

Note: Hardware Trigger - A rising-edge pulse on the SOC pin starts a single conversion. The ADC_StartConvert() function also starts a single conversion

0 Likes