K60启动及文件分析
启动分析
上电,PC指针指向汇编函数Reset_Handler
Reset_Handler是中断向量表里宏定义的第二个函数地址,第一个为起始SP栈指针,第二个为复位中断服务函数。
vectors.h里定义中断映射关系,其中前两个元素分别映射到_BOOT_STACK_ADDRESS和Reset_Handler两个宏定义地址。
|
|
vectors.c里定义中断向量表(中断向量表里宏定义了中断函数地址)
|
|
在MK60_it.h里: 中断服务重定向
重新定义中断向量表
先取消默认的中断向量元素宏定义 #undef VECTOR_xxx
在重新定义到自己编写的中断函数 #define VECTOR_xxx xxx_IRQHandler
在MK60_it.c里: 定义中断服务函数(发生中断后进行的后台处理函数),需要引入MK60_it.h
头文件
中断的分类:PIT定时中断、引脚条件触发中断、DMA采集中断
PIT定时中断处理函数
定义方式 void PITx_IRQHandler(void){//输入//输出//监控//清中断}
清除中断方式:PIT_Flag_Clear(PITx);
|
|
端口触发中断处理函数
PIT0_IRQHandler(void){//输入//输出//监控//清中断}
清除中断方式:
需要引脚号:PTX_n 需要PORTX_ISFR:端口中断标志位
注意:PORTx_ISFR是引脚中断标志寄存器,32为 0-31
清空引脚n的中断标志为方法是ISF=1<<n
与运算:比如第n位已经写入中断标识,n=4,
清除标志位:与0全部清0,与1 保存原数
1.从第0位到第31位如下:00000000 00000000 00000000 00010000 ~0(=000000000000000 0000000000000000) 全部位清零
2.0000000000000000 0000000000000001 << n????
void PORTD_IRQHandler()
{
uint8 n = 0; //引脚号
uint32 flag = PORTD_ISFR;
PORTD_ISFR = ~0; //清中断标志位
n = 11; //场中断
if(flag & (1 << n)) //PTD10触发中断
{
camera_vsync();
}
#if 0 //鹰眼直接全速采集,不需要行中断
n = 28;
if(flag & (1 << n)) //PTA28触发中断
{
camera_href();
}
#endif
}
|
|