📄 main.lst
字号:
\ 00000062 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000064 0028 CMP R0,#+0
\ 00000066 04D0 BEQ ??AT91F_CAN1_Handler_4
\ 00000068 221C MOV R2,R4
\ 0000006A .... LDR R1,??DataTable19 ;; `?<Constant "%d">`
\ 0000006C .... LDR R0,??DataTable26 ;; _Stdout
\ 0000006E ........ _BLF fprintf,fprintf??rT
69 if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
\ ??AT91F_CAN1_Handler_4:
\ 00000072 0098 LDR R0,[SP, #+0]
\ 00000074 8002 LSL R0,R0,#+0xA
\ 00000076 02D5 BPL ??AT91F_CAN1_Handler_5
70 testCAN1 = AT91C_TEST_OK;
\ 00000078 0748 LDR R0,??AT91F_CAN1_Handler_0+0x10 ;; testCAN1
\ 0000007A 0121 MOV R1,#+0x1
\ 0000007C 0170 STRB R1,[R0, #+0]
71 TRACE_DEBUG_H("=> CAN1 WAKEUP ");
72 }
73
74 }
\ ??AT91F_CAN1_Handler_5:
\ 0000007E 01B0 ADD SP,#+0x4
\ 00000080 30BC POP {R4,R5}
\ 00000082 01BC POP {R0}
\ 00000084 0047 BX R0 ;; return
\ 00000086 C046 NOP
\ ??AT91F_CAN1_Handler_0:
\ 00000088 0042F8FF DC32 0xfff84200
\ 0000008C ........ DC32 `?<Constant "\\r\\n______Interrupt rec...">`
\ 00000090 ........ DC32 `?<Constant "\\r\\n_______Interrupt re...">`
\ 00000094 1C42F8FF DC32 0xfff8421c
\ 00000098 ........ DC32 testCAN1
75
76 //*--------------------------------------------------------------------------------------
77 //* Function Name : Main
78 //* Object : Software entry point
79 //*--------------------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
80 void main()
81 {
\ main:
\ 00000000 10B5 PUSH {R4,LR}
82 ////////////////////////////////////////////////////////////////////////////////////////////////////
83 // 设置MCK ,can的时钟为 MCK ,如今MCK=48mHz ,为了降到5K的波特率,需要降低主时钟,现如今将MCK时钟
84 // 降为原来的 8 分之一 ,现 MCK=6M ,
85 //***************** #define AT91B_MAIN_OSC 18432000 // Main Oscillator MAINCK ???
86 ////////////////////////////////////////////////////////////////////////////////////////////////////
87 //AT91C_BASE_PMC->PMC_SCDR |=AT91C_PMC_PCK ;
88 //AT91C_BASE_PMC->PMC_MCKR =AT91C_PMC_CSS_MAIN_CLK ; //选择主时钟
89 //AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_4 ; // 4分频
90
91 AT91C_BASE_CKGR->CKGR_MOR=0x00000701 ; //时钟在56个慢时钟周期后启动
\ 00000002 5A48 LDR R0,??main_0 ;; 0xfffffc20
\ 00000004 5A49 LDR R1,??main_0+0x4 ;; 0x701
\ 00000006 0160 STR R1,[R0, #+0]
92 //必须等待PMC_SR 寄存器中的MOSCS域置位,可通过轮询状态寄存器或等待当PMC_IER 寄存器中与MOSCS相关的中断的中断线上升
93 //>>>>>
94 unsigned int status ;
95 do{
96 status=AT91C_BASE_CKGR->CKGR_MCFR ;
\ ??main_1:
\ 00000008 5A48 LDR R0,??main_0+0x8 ;; 0xfffffc24
\ 0000000A 0068 LDR R0,[R0, #+0]
\ 0000000C 041C MOV R4,R0
97 status &= 0x00010000 ;
\ 0000000E 201C MOV R0,R4
\ 00000010 8024 MOV R4,#+0x80
\ 00000012 6402 LSL R4,R4,#+0x9 ;; #+0x10000
\ 00000014 0440 AND R4,R0
98 }
99 while(status!=0x10000);
\ 00000016 8020 MOV R0,#+0x80
\ 00000018 4002 LSL R0,R0,#+0x9 ;; #+0x10000
\ 0000001A 8442 CMP R4,R0
\ 0000001C F4D1 BNE ??main_1
100 //等待CKGR_MCFR寄存器中的MAINRDY域置位(下)
101
102 do{
103 status=AT91C_BASE_CKGR->CKGR_MCFR ;
\ ??main_2:
\ 0000001E 5548 LDR R0,??main_0+0x8 ;; 0xfffffc24
\ 00000020 0068 LDR R0,[R0, #+0]
\ 00000022 041C MOV R4,R0
104 status &= 0x000010000 ;
\ 00000024 201C MOV R0,R4
\ 00000026 8024 MOV R4,#+0x80
\ 00000028 6402 LSL R4,R4,#+0x9 ;; #+0x10000
\ 0000002A 0440 AND R4,R0
105 }
106 while(status!=0x10000) ; //AT91C_BASE_CKGR->CKGR_MCFR=0x1FFFF ;
\ 0000002C 8020 MOV R0,#+0x80
\ 0000002E 4002 LSL R0,R0,#+0x9 ;; #+0x10000
\ 00000030 8442 CMP R4,R0
\ 00000032 F4D1 BNE ??main_2
107 status=(AT91C_BASE_CKGR->CKGR_MCFR & 0x0FFFF) ; //读出16个慢时钟周期中主时钟周期数
\ 00000034 4F48 LDR R0,??main_0+0x8 ;; 0xfffffc24
\ 00000036 0068 LDR R0,[R0, #+0]
\ 00000038 0004 LSL R0,R0,#+0x10 ;; ZeroExt R0,R0,#+0x10,#+0x10
\ 0000003A 000C LSR R0,R0,#+0x10
\ 0000003C 041C MOV R4,R0
108 //AT91C_BASE_CKGR->CKGR_PLLR=0x00040805 ; //PLL分频时钟
109 AT91C_BASE_PMC->PMC_MCKR =AT91C_PMC_CSS_MAIN_CLK ; //处理器时钟为主机时钟。,4分频
\ 0000003E 4E48 LDR R0,??main_0+0xC ;; 0xfffffc30
\ 00000040 0121 MOV R1,#+0x1
\ 00000042 0160 STR R1,[R0, #+0]
110 AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK_4 ;
\ 00000044 4C48 LDR R0,??main_0+0xC ;; 0xfffffc30
\ 00000046 4C49 LDR R1,??main_0+0xC ;; 0xfffffc30
\ 00000048 0968 LDR R1,[R1, #+0]
\ 0000004A 0822 MOV R2,#+0x8
\ 0000004C 0A43 ORR R2,R1
\ 0000004E 0260 STR R2,[R0, #+0]
111 do{
112 status=AT91C_BASE_CKGR->CKGR_MCFR ;
\ ??main_3:
\ 00000050 4848 LDR R0,??main_0+0x8 ;; 0xfffffc24
\ 00000052 0068 LDR R0,[R0, #+0]
\ 00000054 041C MOV R4,R0
113 status &= 0x000010000 ;
\ 00000056 201C MOV R0,R4
\ 00000058 8024 MOV R4,#+0x80
\ 0000005A 6402 LSL R4,R4,#+0x9 ;; #+0x10000
\ 0000005C 0440 AND R4,R0
114 }
115 while(status!=0x10000) ;
\ 0000005E 8020 MOV R0,#+0x80
\ 00000060 4002 LSL R0,R0,#+0x9 ;; #+0x10000
\ 00000062 8442 CMP R4,R0
\ 00000064 F4D1 BNE ??main_3
116
117 //AT91C_BASE_PMC->PMC_PCER=0xFFFFFFFF ; //使能外设时钟(1,4,5,6,7,8)0x000001F2
118
119 // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
120 // AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
121
122 /*
123 AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINF ;
124 AT91C_BASE_PMC->PMC_MCFR|=AT91C_CKGR_MAINRDY ;
125 AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_MOSCEN ;
126 AT91C_BASE_PMC->PMC_MOR |=AT91C_CKGR_OSCOUNT ;
127 */
128 // AT91C_BASE_PMC->PMC_SCER |=AT91C_PMC_PCK ;
129
130
131 /////////////////////////////////////////////////////////////////////////////////////////////////////
132 // Enable DBGU Clock
133 AT91F_DBGU_CfgPMC(); // DBGU is always clocked
\ 00000066 ........ _BLF AT91F_DBGU_CfgPMC,AT91F_DBGU_CfgPMC??rT
134 // Open PIO for DBGU
135 AT91F_DBGU_CfgPIO();
\ 0000006A ........ _BLF AT91F_DBGU_CfgPIO,AT91F_DBGU_CfgPIO??rT
136 AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
137 AT91C_MASTER_CLOCK/2,
138 AT91C_US_ASYNC_MODE, // mode Register to be programmed
139 115200, // baudrate to be programmedAT91C_BAUDRATE_115200
140 0); // timeguard to be programmed
\ 0000006E 0020 MOV R0,#+0
\ 00000070 01B4 PUSH {R0}
\ 00000072 E123 MOV R3,#+0xE1
\ 00000074 5B02 LSL R3,R3,#+0x9 ;; #+0x1C200
\ 00000076 8C22 MOV R2,#+0x8C
\ 00000078 1201 LSL R2,R2,#+0x4 ;; #+0x8C0
\ 0000007A 4049 LDR R1,??main_0+0x10 ;; 0x16e3600
\ 0000007C 4048 LDR R0,??main_0+0x14 ;; 0xfffff200
\ 0000007E ........ _BLF AT91F_US_Configure,AT91F_US_Configure??rT
\ 00000082 01B0 ADD SP,#+0x4
141 // Enable Transmitter
142 AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
\ 00000084 3E48 LDR R0,??main_0+0x14 ;; 0xfffff200
\ 00000086 ........ _BLF AT91F_US_EnableTx,AT91F_US_EnableTx??rT
143
144 TRACE_INFO("\n\n\r======================================\n\r");
\ 0000008A .... LDR R0,??DataTable26 ;; _Stdout
\ 0000008C 0028 CMP R0,#+0
\ 0000008E 03D0 BEQ ??main_4
\ 00000090 3C49 LDR R1,??main_0+0x18 ;; `?<Constant "\\n\\n\\r==================...">`
\ 00000092 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000094 ........ _BLF fprintf,fprintf??rT
145 TRACE_INFO("*****AT91SAM7A3 Basic CAN in 12mHz 10K 16bit Carry / 1 bit***** \n\r");
\ ??main_4:
\ 00000098 .... LDR R0,??DataTable26 ;; _Stdout
\ 0000009A 0028 CMP R0,#+0
\ 0000009C 03D0 BEQ ??main_5
\ 0000009E 3A49 LDR R1,??main_0+0x1C ;; `?<Constant "*****AT91SAM7A3 Basic...">`
\ 000000A0 .... LDR R0,??DataTable26 ;; _Stdout
\ 000000A2 ........ _BLF fprintf,fprintf??rT
146 TRACE_INFO("======================================\n\r");
\ ??main_5:
\ 000000A6 .... LDR R0,??DataTable26 ;; _Stdout
\ 000000A8 0028 CMP R0,#+0
\ 000000AA 03D0 BEQ ??main_6
\ 000000AC 3749 LDR R1,??main_0+0x20 ;; `?<Constant "=====================...">`
\ 000000AE .... LDR R0,??DataTable26 ;; _Stdout
\ 000000B0 ........ _BLF fprintf,fprintf??rT
147
148 ///////////////////////////////////////////////////////////////////////////////////////////
149 // Init CAN0 and CAN1
150 ///////////////////////////////////////////////////////////////////////////////////////////
151
152 // Enable CAN0 and CAN1 PIOs
153 AT91F_CAN0_CfgPIO();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -