STVD中斷函數寫法


  一、寄存器開發方式

  1)以定時器TIM4為例,首先對TIM4的相關寄存器進行初始化,打開TIM4的中斷,注意在STVD+COSMIC的開發環境下,開總中斷使用語句_asm("rim");

void TIM4_init(void)        //TIM4 init
{
    TIM4_CR1=0x80;
    TIM4_PSCR=0x07;        //clock div : 128 (T=8us)
    TIM4_ARR=125;        //interrupt per 1ms
    TIM4_IER=0x01;        //enable update interrupt
    _asm("rim");        //enable EA
    TIM4_EGR=0x01;        //update case
    TIM4_CR1|=0x01;        //enable count
}

  2)接下來編寫TIM4的中斷服務程序,可以直接寫在main.c中,注意函數前一定要加@far @interrupt,中斷服務函數的名稱可以自己取,比如此處的TIM4_Interrupt;

@far @interrupt void TIM4_Interrupt(void)
{
    TIM4_SR&=0xfe;
    
    cnt_num4++;
    if(cnt_num4>10)
    {
        cnt_num4=0;
        flag_adc=1;
    }
}

  3)接下來在stm8_interrupt_vector.c文件中對中斷函數進行聲明,並修改中斷向量表中對應的中斷服務函數名稱為我們定義的名稱,如TIM4_Interrupt為中斷向量的第23個;

extern void _stext();     /* startup routine */
extern @far @interrupt void TIM4_Interrupt(void);
    {0x82, NonHandledInterrupt}, /* irq21 */
    {0x82, NonHandledInterrupt}, /* irq22 */
    {0x82, TIM4_Interrupt}, /* irq23 */
    {0x82, NonHandledInterrupt}, /* irq24 */
    {0x82, NonHandledInterrupt}, /* irq25 */   

  二、庫函數開發方式

  1)以外部中斷為例,可用按鍵觸發,首先初始化對應引腳,開啟外部中斷和總中斷,開總中斷使用語句_asm("rim");

void main(void)
{
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
    GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Init(GPIOA,GPIO_PIN_2,GPIO_MODE_IN_PU_IT);
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOA,EXTI_SENSITIVITY_FALL_ONLY);
    _asm("rim");
    /* Infinite loop */
  while (1)
  {
        ;
  }
}

  2)接下來在stm8s_it.c文件中,找到對應中斷向量的中斷服務程序,在里面添加代碼即可;

/**
  * @brief External Interrupt PORTA Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
    GPIO_WriteReverse(GPIOA,GPIO_PIN_3);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM