📄 os_dcc.lst
字号:
96 * explicit return statement. "#pragma diag_suppress=Pe940", which appears at the
97 * top of this file, is used to suppress the warning that normally results from non-
98 * void functions lacking return statements.
99 *********************************************************************************************************
100 */
101
\ In segment CODE, align 4, keep-with-next
102 static __arm INT32U OSDCC_Read (void)
103 {
104 __asm("mrc P14,0,R0,C1,C0");
\ OSDCC_Read:
\ 00000000 100E11EE mrc P14,0,R0,C1,C0
105 }
\ 00000004 0EF0A0E1 MOV PC,LR ;; return
106
107 /*
108 *********************************************************************************************************
109 * OSDCC_Write()
110 *
111 * Description: This function places data in the comms data write register.
112 *
113 * Arguments : none
114 *
115 * Returns : none
116 *********************************************************************************************************
117 */
118
\ In segment CODE, align 4, keep-with-next
119 static __arm void OSDCC_Write (INT32U data)
120 {
121 __asm("mcr P14,0,R0,C1,C0");
\ OSDCC_Write:
\ 00000000 100E01EE mcr P14,0,R0,C1,C0
122 }
\ 00000004 0EF0A0E1 MOV PC,LR ;; return
123
124 /*
125 *********************************************************************************************************
126 * OSDCC_Handler()
127 *
128 * Description: This function reads commands from the DCC comms data read register. Data may be
129 * transferred to or from memory based on those commands.
130 *
131 * Arguments : none
132 *
133 * Returns : none
134 *
135 * Notes : 1) This function should be called periodically. If OS_CPU_ARM_DCC_EN is '1', this
136 * function will be called from both the idle task hook and the tick interrupt hook.
137 *********************************************************************************************************
138 */
139
\ In segment CODE, align 4, keep-with-next
140 void OSDCC_Handler (void)
141 {
\ OSDCC_Handler:
\ 00000000 10402DE9 PUSH {R4,LR}
142 INT32U reg_val;
143 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
144 OS_CPU_SR cpu_sr = 0;
\ 00000004 0040A0E3 MOV R4,#+0
145 #endif
146
147
148 OS_ENTER_CRITICAL(); /* Disable interrupts */
\ 00000008 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 0000000C 0040B0E1 MOVS R4,R0
149
150 /* Check for the presence of new data */
151 if ((OSDCC_ReadCtrl() & OS_DCC_COMM_CTRL_RD) != 0) {
\ 00000010 ........ BL OSDCC_ReadCtrl
\ 00000014 010010E3 TST R0,#0x1
\ 00000018 5B00000A BEQ ??OSDCC_Handler_0
152 reg_val = OSDCC_Read(); /* Read the new data */
\ 0000001C ........ BL OSDCC_Read
153
154 if ((reg_val & OS_DCC_OP_COMMAND) != 0) { /* Determine whether a command has been received */
\ 00000020 010010E3 TST R0,#0x1
\ 00000024 5600000A BEQ ??OSDCC_Handler_1
155 OSDCC_Cmd = reg_val;
\ 00000028 30129FE5 LDR R1,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 0000002C 000081E5 STR R0,[R1, #+0]
156 /* Check for an odd address in the next operation */
157 if ((OSDCC_Cmd & OS_DCC_OP_ODD_ADDR) != 0) {
\ 00000030 28029FE5 LDR R0,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 00000034 000090E5 LDR R0,[R0, #+0]
\ 00000038 800410E3 TST R0,#0x80000000
\ 0000003C 0400000A BEQ ??OSDCC_Handler_3
158 OSDCC_Addr |= 1;
\ 00000040 1C029FE5 LDR R0,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 00000044 18129FE5 LDR R1,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 00000048 001091E5 LDR R1,[R1, #+0]
\ 0000004C 011091E3 ORRS R1,R1,#0x1
\ 00000050 001080E5 STR R1,[R0, #+0]
159 }
160 /* If data will be read, adjust OSDCC_ItemCnt */
161 if ((OSDCC_Cmd & (OS_DCC_OP_READ_U32 | OS_DCC_OP_READ_U16 | OS_DCC_OP_READ_U8
162 | OS_DCC_OP_GET_CAPS)) != 0) {
\ ??OSDCC_Handler_3:
\ 00000054 04029FE5 LDR R0,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 00000058 000090E5 LDR R0,[R0, #+0]
\ 0000005C F00610E3 TST R0,#0xF000000
\ 00000060 0600000A BEQ ??OSDCC_Handler_4
163 OSDCC_ItemCnt = (OSDCC_Cmd >> 2) & 0xffff;
\ 00000064 FC019FE5 LDR R0,??OSDCC_Handler_2+0x8 ;; OSDCC_ItemCnt
\ 00000068 F0119FE5 LDR R1,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 0000006C 001091E5 LDR R1,[R1, #+0]
\ 00000070 0117B0E1 LSLS R1,R1,#+14
\ 00000074 2118B0E1 LSRS R1,R1,#+16
\ 00000078 001080E5 STR R1,[R0, #+0]
\ 0000007C 3D0000EA B ??OSDCC_Handler_5
164 } else { /* Data will be written; initialize OSDCC_Data */
165 if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U32) != 0) {
\ ??OSDCC_Handler_4:
\ 00000080 D8019FE5 LDR R0,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 00000084 000090E5 LDR R0,[R0, #+0]
\ 00000088 400510E3 TST R0,#0x10000000
\ 0000008C 0900000A BEQ ??OSDCC_Handler_6
166 OSDCC_Data |= (OSDCC_Cmd << 14) & 0xffff0000;
\ 00000090 D4019FE5 LDR R0,??OSDCC_Handler_2+0xC ;; OSDCC_Data
\ 00000094 D0119FE5 LDR R1,??OSDCC_Handler_2+0xC ;; OSDCC_Data
\ 00000098 001091E5 LDR R1,[R1, #+0]
\ 0000009C BC219FE5 LDR R2,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 000000A0 002092E5 LDR R2,[R2, #+0]
\ 000000A4 0227B0E1 LSLS R2,R2,#+14
\ 000000A8 2228B0E1 LSRS R2,R2,#+16
\ 000000AC 021891E1 ORRS R1,R1,R2, LSL #+16
\ 000000B0 001080E5 STR R1,[R0, #+0]
\ 000000B4 050000EA B ??OSDCC_Handler_7
167 } else {
168 OSDCC_Data = (OSDCC_Cmd >> 2) & 0xffff;
\ ??OSDCC_Handler_6:
\ 000000B8 AC019FE5 LDR R0,??OSDCC_Handler_2+0xC ;; OSDCC_Data
\ 000000BC 9C119FE5 LDR R1,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 000000C0 001091E5 LDR R1,[R1, #+0]
\ 000000C4 0117B0E1 LSLS R1,R1,#+14
\ 000000C8 2118B0E1 LSRS R1,R1,#+16
\ 000000CC 001080E5 STR R1,[R0, #+0]
169 }
170 /* Write a single byte */
171 if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U8) != 0) {
\ ??OSDCC_Handler_7:
\ 000000D0 88019FE5 LDR R0,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 000000D4 000090E5 LDR R0,[R0, #+0]
\ 000000D8 400410E3 TST R0,#0x40000000
\ 000000DC 0900000A BEQ ??OSDCC_Handler_8
172 *(INT8U *)OSDCC_Addr = OSDCC_Data;
\ 000000E0 7C019FE5 LDR R0,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 000000E4 000090E5 LDR R0,[R0, #+0]
\ 000000E8 7C119FE5 LDR R1,??OSDCC_Handler_2+0xC ;; OSDCC_Data
\ 000000EC 001091E5 LDR R1,[R1, #+0]
\ 000000F0 0010C0E5 STRB R1,[R0, #+0]
173 OSDCC_Addr += 1;
\ 000000F4 68019FE5 LDR R0,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 000000F8 64119FE5 LDR R1,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 000000FC 001091E5 LDR R1,[R1, #+0]
\ 00000100 011091E2 ADDS R1,R1,#+1
\ 00000104 001080E5 STR R1,[R0, #+0]
174 }
175 /* Write two bytes */
176 if ((OSDCC_Cmd & OS_DCC_OP_WRITE_U16) != 0) {
\ ??OSDCC_Handler_8:
\ 00000108 50019FE5 LDR R0,??OSDCC_Handler_2 ;; OSDCC_Cmd
\ 0000010C 000090E5 LDR R0,[R0, #+0]
\ 00000110 800510E3 TST R0,#0x20000000
\ 00000114 0900000A BEQ ??OSDCC_Handler_9
177 *(INT16U *)OSDCC_Addr = OSDCC_Data;
\ 00000118 44019FE5 LDR R0,??OSDCC_Handler_2+0x4 ;; OSDCC_Addr
\ 0000011C 000090E5 LDR R0,[R0, #+0]
\ 00000120 44119FE5 LDR R1,??OSDCC_Handler_2+0xC ;; OSDCC_Data
\ 00000124 001091E5 LDR R1,[R1, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -