为什么小弟我的中断开启后就不能识别键盘了呢
为什么我的中断开启后就不能识别键盘了呢?
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
// YEAR = 2003; // 初化年
// MONTH = 6; // 初化月
// DOM = 20; // 初化日
CIIR = 0x01; // 设置秒值的增量产生一次中断
ILR = 0x03; // 清除RTC增量和报警中断标志
CCR = 0x01; // 启动RTC
/* VIC初始化 */
VICIntSelect = 0x00; // 设置所有中断连接IRQ中断
VICVectCntl0 = 0x20 | 13; // 分配通道0
VICVectAddr0 = (int)IRQ_Timer0; // 设置中断服务程序地址
VICIntEnable = (1 << 13); // 使能RTC中断
上面的是代码,当我在主函数中你打开终端,我的程序就不能在按下按钮之后显示数字........这是为什么?
------解决方案--------------------
分步调试会发现,程序绝大部分时间进入中断,刷新显示几乎没有得到时序合理的执行。
计算中断执行两次之间的时间是否过短。
中断服务函数最多不能超过200行,最好100行以内。不可中断中调用函数。
中断中最好只处理标志,对出后,主函数中处理标志。
如果动态显示驱动,需要合理计算刷新频率,否则会有鬼影出现。
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
// YEAR = 2003; // 初化年
// MONTH = 6; // 初化月
// DOM = 20; // 初化日
CIIR = 0x01; // 设置秒值的增量产生一次中断
ILR = 0x03; // 清除RTC增量和报警中断标志
CCR = 0x01; // 启动RTC
/* VIC初始化 */
VICIntSelect = 0x00; // 设置所有中断连接IRQ中断
VICVectCntl0 = 0x20 | 13; // 分配通道0
VICVectAddr0 = (int)IRQ_Timer0; // 设置中断服务程序地址
VICIntEnable = (1 << 13); // 使能RTC中断
上面的是代码,当我在主函数中你打开终端,我的程序就不能在按下按钮之后显示数字........这是为什么?
------解决方案--------------------
分步调试会发现,程序绝大部分时间进入中断,刷新显示几乎没有得到时序合理的执行。
计算中断执行两次之间的时间是否过短。
中断服务函数最多不能超过200行,最好100行以内。不可中断中调用函数。
中断中最好只处理标志,对出后,主函数中处理标志。
如果动态显示驱动,需要合理计算刷新频率,否则会有鬼影出现。