本帖最后由 e掾木 于 2011-3-29 08:36 编辑
呵呵,这严重鄙视很显然是针对我的,笑纳。
看在LZ诚恳的份上,那就多说一点:
既然是高温下闪烁,我感觉不是你的延时出了毛病,LED刷新最低20ms一次,再高就会看到频闪,但还不至于熄灭性闪烁。既然发生了,人对光线视觉暂留时间是0.1S,那就说明你的LED有至少100mS没刷新?这么长时间没刷新,请详细检查你的程序是不是在中断里打转?刷新数据不准,怀疑你在多处更新LED要显示的对象,在更新处被中断显示,解决办法是尽可能在一个地方更新,更新时仔细处理临界状态。
呵呵,术语“临界”不是yewuyi提出的,稍微翻过书的设计者都知道,这不属于专用。大意是:那些要紧代码处理时不容许中断,需要一气呵成。处理时关掉中断,结束时打开中断。注意这里面的代码一定要越少越好,不要做函数调用、复杂数学计算,一般仅针对于硬件端口处理。
中断压栈、出栈保存关键寄存器是必须的,附参考代码于后。
.macro REGS_SAVE
push.d w0
push.d w2
push.d w4
push.d w6
push.d w8
push.d w10
push.d w12
push w14
push TBLPAG
push PSVPAG
push RCOUNT
push SR
push CORCON
.endm
macro REGS_RESTORE
pop CORCON
pop SR
pop RCOUNT
pop PSVPAG
pop TBLPAG
pop w14
pop.d w12
pop.d w10
pop.d w8
pop.d w6
pop.d w4
pop.d w2
pop.d w0
.endm |