已回答假定已回答

BF706 GPIO PINT_INV_SET使用问题

Scrappy 在 2017-2-16 詢問的問題
最後回覆由hpkamen於2017-2-21提供

使用型号 : BF706 EZ-KIT-MINI

需求 : 压下PB1(Button)时,让LED0的状态改变

 

问题 : 根据ADI网站上下载的BF70x_BlackfinProcessorHardwareReference文件的20-8页描述,设置PINT_INV_SET应该能够改变Interrupt的trigger方式,以下列code来看,应是设定为Low Level Trigger,即压下Button才trigger,但是在*pREG_PORTC_DATA_TGL |= ADI_GPIO_PIN_3;这一行前面设置breakpoint后,压下Button,并不会进入这一行,而是在放开Button时(或根本不去压)才会进入,请问是设定错误还是对PINT_INV_SET的使用方法理解错误?

谢谢!

 

int main(void)

{

       adi_initComponents();

       GPIO_SET();

       GPIO_INTERRUPT_SET();

       while(1){}

}

 

 

void GPIO_SET(void)

{

       /*LED0*/

       *pREG_PORTC_FER_CLR |= ADI_GPIO_PIN_3;

       *pREG_PORTC_DATA_SET |= ADI_GPIO_PIN_3;

       *pREG_PORTC_DIR_SET |= ADI_GPIO_PIN_3;

 

 

       /*PB1*/

       *pREG_PORTC_FER_CLR |= ADI_GPIO_PIN_2;

       *pREG_PINT1_INV_SET |= ADI_GPIO_PIN_2;

       *pREG_PORTC_DIR_CLR = ADI_GPIO_PIN_2;

       *pREG_PORTC_INEN_SET |= ADI_GPIO_PIN_2;

}

 

 

void GPIO_INTERRUPT_SET(void)

{

       *pREG_PINT1_ASSIGN |= ADI_GPIO_PIN_2;

       *pREG_PINT1_MSK_SET |= ADI_GPIO_PIN_2;

       *pREG_PINT1_EDGE_CLR |= ADI_GPIO_PIN_2;

       adi_int_InstallHandler(INTR_PINT1_BLOCK, GPIO_ISR1, NULL, true);

}

 

 

void GPIO_ISR1(uint32_t iid, void* handlerArg)

{

       if(*pREG_PORTC_DATA & ADI_GPIO_PIN_2)

       {

       *pREG_PORTC_DATA_TGL |= ADI_GPIO_PIN_3;

       }

}

結果