f51bce3fed
We currently only support building with CCS and SCons is not using. bsp/rm48x50/HALCoGen/HALCoGen.{hcg,dil} is the HALCoGen project file. You may need to regenerate the source file as you like, providing that: 1, IRQ is in Dispatch Mode and the table entry is IRQ_Handler. The channel 5 in enabled and connected to IRQ. 2, RTI driver is enabled and compare3 source is selected to counter1 and the compare3 will generate tick in the period of 10ms. This value is coresponding with RT_TICK_PER_SECOND in rtconfig.h. In CCS, you need to create a new CCS project and create link folders pointing at bsp/rm48x50, libcpu/arm/rm48x50 and src/, include/. Remember to add the include path to the Build Properties.
99 lines
3.2 KiB
NASM
99 lines
3.2 KiB
NASM
;-------------------------------------------------------------------------------
|
|
; dabort.asm
|
|
;
|
|
; (c) Texas Instruments 2009-2013, All rights reserved.
|
|
;
|
|
|
|
.text
|
|
.arm
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
; Run Memory Test
|
|
|
|
.ref custom_dabort
|
|
.def _dabort
|
|
.asmfunc
|
|
|
|
_dabort
|
|
stmfd r13!, {r0 - r12, lr}; push registers and link register on to stack
|
|
|
|
ldr r12, esmsr3 ; ESM Group3 status register
|
|
ldr r0, [r12]
|
|
tst r0, #0x8 ; check if bit 3 is set, this indicates uncorrectable ECC error on B0TCM
|
|
bne ramErrorFound
|
|
tst r0, #0x20 ; check if bit 5 is set, this indicates uncorrectable ECC error on B1TCM
|
|
bne ramErrorFound
|
|
|
|
noRAMerror
|
|
tst r0, #0x80 ; check if bit 7 is set, this indicates uncorrectable ECC error on ATCM
|
|
bne flashErrorFound
|
|
|
|
bl custom_dabort ; custom data abort handler required
|
|
; If this custom handler is written in assembly, all registers used in the routine
|
|
; and the link register must be saved on to the stack upon entry, and restored before
|
|
; return from the routine.
|
|
|
|
ldmfd r13!, {r0 - r12, lr}; pop registers and link register from stack
|
|
subs pc, lr, #8 ; restore state of CPU when abort occurred, and branch back to instruction that was aborted
|
|
|
|
ramErrorFound
|
|
ldr r1, ramctrl ; RAM control register for B0TCM TCRAMW
|
|
ldr r2, [r1]
|
|
tst r2, #0x100 ; check if bit 8 is set in RAMCTRL, this indicates ECC memory write is enabled
|
|
beq ramErrorReal
|
|
mov r2, #0x20
|
|
str r2, [r1, #0x10] ; clear RAM error status register
|
|
ldr r1, ram2ctrl
|
|
str r2, [r1, #0x10] ; clear RAM error status register
|
|
|
|
mov r2, #0x28
|
|
str r2, [r12] ; clear ESM group3 flags for uncorrectable RAM ECC errors
|
|
mov r2, #5
|
|
str r2, [r12, #0x18] ; The nERROR pin will become inactive once the LTC counter expires
|
|
|
|
ldmfd r13!, {r0 - r12, lr}
|
|
subs pc, lr, #4 ; branch to instruction after the one that caused the abort
|
|
; this is the case because the data abort was caused intentionally
|
|
; and we do not want to cause the same data abort again.
|
|
|
|
ramErrorReal
|
|
b ramErrorReal ; branch here forever as continuing operation is not recommended
|
|
|
|
flashErrorFound
|
|
ldr r1, flashbase
|
|
ldr r2, [r1, #0x6C] ; read FDIAGCTRL register
|
|
|
|
mov r2, r2, lsr #16
|
|
tst r2, #5 ; check if bits 19:16 are 5, this indicates diagnostic mode is enabled
|
|
beq flashErrorReal
|
|
mov r2, #1
|
|
mov r2, r2, lsl #8
|
|
|
|
str r2, [r1, #0x1C] ; clear FEDACSTATUS error flag
|
|
|
|
mov r2, #0x80
|
|
str r2, [r12] ; clear ESM group3 flag for uncorrectable flash ECC error
|
|
mov r2, #5
|
|
str r2, [r12, #0x18] ; The nERROR pin will become inactive once the LTC counter expires
|
|
|
|
ldmfd r13!, {r0 - r12, lr}
|
|
subs pc, lr, #4 ; branch to instruction after the one that caused the abort
|
|
; this is the case because the data abort was caused intentionally
|
|
; and we do not want to cause the same data abort again.
|
|
|
|
|
|
flashErrorReal
|
|
b flashErrorReal ; branch here forever as continuing operation is not recommended
|
|
|
|
esmsr3 .word 0xFFFFF520
|
|
ramctrl .word 0xFFFFF800
|
|
ram2ctrl .word 0xFFFFF900
|
|
ram1errstat .word 0xFFFFF810
|
|
ram2errstat .word 0xFFFFF910
|
|
flashbase .word 0xFFF87000
|
|
|
|
.endasmfunc
|
|
|
|
|