|
本帖最后由 FSL_TICS_ZP 于 2014-4-1 09:23 编辑
正在学习M0+,进行到外部中断阶段,中断一直无法进入,仿真时发现停留在arm_cmo文件的void set_irq_priority (int irq, int prio)函数中请大家帮忙分析下。
1、硬件平台:FRDM-46Z
2、测试方式:按下开发板按键(SW1),触发PTC_3端口中断,中断服务程序促使LED2(红灯)翻转。
*程序实现方式:在飞思卡尔官方例程(KL46_SC)的gpio_led_demo工程基础上,加入野火的exti构件。变动部分的代码如下:
*****************************************
主程序部分:
int main (void)
{
/*LED init*/
gpio_init(PORTD,5,1,1);
gpio_init(PORTE,29,1,1);
/*SW init*/
exti_init(PORTC,3,zero_up);
while(1)
{
for(uint16 i=0;i<10000;i++)
{
for(uint16 k=0;k<1000;k++)
{
;;
}
}
gpio_turn(PORTD,5);
// gpio_turn(PORTE,29);
}
}
*****************************************
中断服务程序isr.c:
#include "common.h"
#include "exti.h"
#include "gpio.h"
void exti_isr(void)
{
uint8 n=0; //引脚号
/* 根据自己的引脚号,自己编写,这里给出 n= 0 的模版,即 PTAn 产生外部中断
* 也给出 n=26 例子 ,自行修改 n 即可 ,添加用户任务就行
*/
//========================== n = 0 模版 ========================================
n=3;
if(PORTC_ISFR & (1<<n)) //PTA0触发中断
{
PORTC_ISFR |= (1<<n); //写1清中断标志位
/* 以下为用户任务 */
gpio_turn(PORTE,29);
/* 以上为用户任务 */
}
}
*****************************************
中断服务程序头文件isr.h:
#ifndef __ISR_H
#define __ISR_H 1
#undef VECTOR_47
#define VECTOR_47 exti_isr
extern void exti_isr(void);
#endif //__ISR_H
*****************************************
外部中断构件exti.c:
#include "common.h"
#include "gpio.h"
#include "exti.h"
/*************************************************************************
* 野火嵌入式开发工作室
*
* 函数名称:exti_init
* 功能说明:EXTI外部GPIO中断初始化
* 参数说明:PORTx 端口号(PORTA,PORTB,PORTC,PORTD,PORTE)
* n 端口引脚
* exti_cfg 触发选项和上拉下拉选项
* 函数返回:无
* 修改时间:2012-1-20
* 备 注:
*************************************************************************/
void exti_init(PORTx portx, uint8 n,exti_cfg cfg)
{
SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK<<portx); //开启PORTx端口
PORT_PCR_REG(PORTX[portx],n)= PORT_PCR_MUX(1)| PORT_PCR_IRQC(cfg & 0x7f ) | PORT_PCR_PE_MASK | ((cfg & 0x80 )>>7); // 复用GPIO , 确定触发模式 ,开启上拉或下拉电阻
GPIO_PDDR_REG(GPIOx[portx])&=~(1<<n); //输入模式
set_irq_priority((INT_PORTD - 16),1);
enable_irq(INT_PORTD - 16); //使能PORT中断,PORTA的ISR中断号为87
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|