挺矬的一件事
来源:互联网 发布:南京java培训机构排名 编辑:程序博客网 时间:2024/04/30 19:36
最近在玩6410的一块开发板,跑ucOS2。
想写一个基于串口的调试命令输入,方便观察变量。基本想法是接收串口的输入回显并判别、执行命令,输出内存值。
VIC1上使能UART0输入中断,虽然在之前已经把UART0除接收中断外的都屏蔽了,刚使能立刻打印就能看到UART0的中断Pending,看来之前BOOT发送中断都是使能的。初始化完成后打开全局中断,就反复跳到UART0的ISR里,一直觉得可能是VIC1的中断响应写的有问题,看了一些文档,有的说要清VIC0和VIC1,于是反复在VIC0ADDR和VIC1ADDR之前读写,都没什么用,后来证实只要读写VIC1就可以了,试了一下2个都读写也没什么问题,但不在对应ISR中这么做是错误的,可能会使PL192异常,对于2个VIC的中断嵌套看到正规手册上是这么做的:
; 进入IRQ模式,关闭全局中断
;保存用到的寄存器
;读VICxADDR,以屏蔽其他同级和低优先级的中断源,VICIRQSTATUS和VICRAWINTR不受影响
;保存SPSR
;使能全局中断,进入SVC模式执行中断处理子程序,并清除中断源
。。。 <----高优先级中断可能进入
;关闭全局中断,再次进入IRQ模式
;恢复SPSR
;恢复用到的寄存器
;写VICxADDR,响应中断,清除中断向量
;返回
好像和普通的中断嵌套处理没什么区别。
FIQ,IRQ能同时从VIC发出,AMR核会优先响应FIQ,只能有一个FIQ?默认优先级都是一样的15(最低),同优先级低中断号的优先级高一些,但不会因此而发生中断嵌套。
6410支持3种中断处理方式,一种是老的AHB方式,也就是人为读写VICxADDR,读写Daisy Chain上的VIC清除中断Prime上的VIC中断自然也会清除;另一种是Daisy-chained VIC模式,VIC之间的VICIRQACKOUT是相连的,人为控制PrimeVIC;另一种是VIC port方式,由P15协处理器自动响应中断,程序跳转并ACK包括DaisyChain上的中断源,VIC之间有握手信号线,还区分同步和异步方式。faint!
回来说那个反复跳进ISR的问题,其实是清除UART0的pending寄存器地址定义错了,每次都没清掉,真不细心,查了1天时间,也学习了一些VIC中断的DD。搞这个挺累的。
最后查看内存的命令终于能用了,可不会弄Del的回显,光标不会动,不知道是不是Dnw的问题,下次查查。还要加点联想的功能,每次输入太累了。
- 挺矬的一件事
- 一件事一件事的做好
- 郁闷的一件事!
- 郁闷的一件事
- 难忘的一件事
- 一件不爽的事
- 一件后悔的事
- 一件后悔的事
- 一件可笑的事
- 幸福的一件事
- 一件很恶心的事
- 最难忘的一件事
- 小时候难忘的一件事
- 最害怕的一件事。。。
- 很诡异的一件事
- 一件很诡异的事
- 一件挺有意思的事,关于数据校验
- 一件事
- 配置Vim 一键渲染Rib
- 英特尔MeeGo软件大赛主攻平板电脑 让市场当评委
- 十一:MFC关于读写TXT文件
- IE8的一个奇怪的问题。
- Mongodb源码分析--主程序入口main()
- 挺矬的一件事
- windows live writer向cnblog发布文章设置(转)
- oracle PL/SQL的基本构成,块结构和基本语法要求,数据类型,变量定义,运算符和函数
- DBA_DATAPUMP_JOBS
- js javascript 二叉树排序方法
- 如何使用WindowsLiveWriter写CSDN博客(转)
- CreateSemaphore
- wget 使用指南
- Referenced file contains error(http://www.ibatis.com/dtd/sql-map-2.dtd) 错误