芯片:AT91SAM7A3
环境:ADS1.2
boot:CStartup.s 官方版本
移植版本:AN-1014版通用Arm移植
ucos2:2.76
1. 首先要在boot里面分配各个模式的堆栈,因为要在片内32K RAM做调试,所以暂时把栈底改在0x208000
的地方,程序空间从0x200000开始。
2. 将boot中IRQ_Handler_Entry改为os_cpu_a.s中的OS_CPU_IRQ_ISR
3. 设置相应的定时器中断周期,并添加OSTimeTick()调用。
4. 修改IRQ_Handler_Entry,将原IRQ_Handler_Entry的内容加进去。
OS_CPU_IRQ_ISR_1
;//*********** add ************
ldr r14, =AT91C_BASE_AIC
ldr r0 , [r14, #AIC_IVR]
str r14, [r14, #AIC_IVR]
;//*********** add End ********
MSR CPSR_c, #(NO_INT | IRQ32_MODE) ; Change to IRQ mode (to use
the IRQ stack to handle interrupt)
;//*********** add ************
stmfd sp!, { r1-r8, r12, r14}
mov r14, pc
bx r0
ldmia sp!, { r1-r8, r12, r14}
;//*********** add End ************
MSR CPSR_c, #(NO_INT | SVC32_MODE) ; Change to SVC mode
;//************ add *************
ldr r14, =AT91C_BASE_AIC
str r14, [r14, #AIC_EOICR]
;//************ add End ************
LDR R0, =OSIntExit ; OSIntExit();
MOV LR, PC
BX R0
5. 响应修改FIRQ部分
6. 在主流程里加了两个Task测试,通过。