⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can_ex1.cod

📁 can bus 源代码
💻 COD
📖 第 1 页 / 共 5 页
字号:
*** Disassembly of Segment '?PR?CAN_hw_init?T?CAN_hw':
 FILE: 'CAN_hw.c'
 0000045C          CAN_hw_init?T:  ; FUNCTION START
  182: CAN_ERROR CAN_hw_init (U32 ctrl, U32 baudrate)  {
 0000045C  B510      PUSH        {R4,LR}
 0000045E  ---- Variable 'baudrate' assigned to Register 'R1' ----
 0000045E  1C02      MOV         R2,R0 ; ctrl
 00000460  ---- Variable 'ctrl' assigned to Register 'R2' ----
 00000460            ; SCOPE-START
  183:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 00000460  1C10      MOV         R0,R2 ; ctrl
 00000462  3801      SUB         R0,#0x1
 00000464  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  184:   regCAN_AF *ptrcan_af = CAN_AF_BASE;
 00000464  4B0D      LDR         R3,[R15,#52] ; PoolRef @0x49C
 00000466  ---- Variable 'ptrcan_af' assigned to Register 'R3' ----
  185:   regCAN    *ptrcan    = (regCAN *) CAN_BASE[ctrl0];
 00000466  1C02      MOV         R2,R0 ; ctrl0
 00000468  0092      LSL         R2,R2,#0x2 ; ctrl0
 0000046A  480D      LDR         R0,[R15,#52] ; PoolRef @0x4A0 ; CAN_BASE
 0000046C  5884      LDR         R4,[R0,R2]
 0000046E  ---- Variable 'ptrcan' assigned to Register 'R4' ----
  187:   ptrcan_af->AFMR = 1;                /* Disable acceptance filter           */
 0000046E  2201      MOV         R2,#0x1
 00000470  1C18      MOV         R0,R3 ; ptrcan_af
 00000472  6002      STR         R2,[R0,#0x0] ; ptrcan_af
  188:   ptrcan->CANMOD  = 1;                /* Enter reset mode                    */
 00000474  2201      MOV         R2,#0x1
 00000476  1C20      MOV         R0,R4 ; ptrcan
 00000478  6002      STR         R2,[R0,#0x0] ; ptrcan
  189:   ptrcan->CANIER  = 0;                /* Disable all interrupts              */
 0000047A  2000      MOV         R0,#0x0
 0000047C  1C22      MOV         R2,R4 ; ptrcan
 0000047E  6110      STR         R0,[R2,#0x10]
  190:   ptrcan->CANGSR  = 0;                /* Clear status register               */
 00000480  2000      MOV         R0,#0x0
 00000482  1C22      MOV         R2,R4 ; ptrcan
 00000484  6090      STR         R0,[R2,#0x8]
  191:   ptrcan->CANBTR  = CAN_calc_baudrate(baudrate); /* Set bit timing           */
 00000486  1C08      MOV         R0,R1 ; baudrate
 00000488  F000      BL          CAN_calc_baudrate?T  ; T=0x08D9  (1)
 0000048A  FA26      BL          CAN_calc_baudrate?T  ; T=0x08D9  (2)
 0000048C  1C21      MOV         R1,R4 ; ptrcan
 0000048E  6148      STR         R0,[R1,#0x14]
  192:   ptrcan->CANIER  = 0x0603;           /* Enable Tx and Rx interrupt          */
 00000490  4804      LDR         R0,[R15,#16] ; PoolRef @0x4A4
 00000492  1C21      MOV         R1,R4 ; ptrcan
 00000494  6108      STR         R0,[R1,#0x10]
  194:   return CAN_OK;
 00000496  2000      MOV         R0,#0x0
 00000498            ; SCOPE-END
  195: }
 00000498  BD10      POP         {R4,PC}
 0000049A            ; END 'CAN_hw_init?T'
LARM LINKER/LOCATER V2.32a                                                            03/15/2007  08:58:24  PAGE 14



 0000049A            ALIGN       4
 0000049C  E003C000  DD          0xE003C000		; POOL-Entry U=1
 000004A0  40000008  DD          CAN_BASE		; POOL-Entry U=1
 000004A4  00000603  DD          0x603		; POOL-Entry U=1

*** Disassembly of Segment '?PR?CAN_hw_start?T?CAN_hw':
 FILE: 'CAN_hw.c'
 000004A8          CAN_hw_start?T:  ; FUNCTION START
  207: CAN_ERROR CAN_hw_start (U32 ctrl)  {
 000004A8  1C01      MOV         R1,R0 ; ctrl
 000004AA  ---- Variable 'ctrl' assigned to Register 'R1' ----
 000004AA            ; SCOPE-START
  208:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 000004AA  1C08      MOV         R0,R1 ; ctrl
 000004AC  3801      SUB         R0,#0x1
 000004AE  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  209:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 000004AE  1C01      MOV         R1,R0 ; ctrl0
 000004B0  0089      LSL         R1,R1,#0x2 ; ctrl0
 000004B2  4803      LDR         R0,[R15,#12] ; PoolRef @0x4C0 ; CAN_BASE
 000004B4  5842      LDR         R2,[R0,R1]
 000004B6  ---- Variable 'ptrcan' assigned to Register 'R2' ----
  211:   ptrcan->CANMOD = 0;                 /* Enter normal operating mode         */
 000004B6  2100      MOV         R1,#0x0
 000004B8  1C10      MOV         R0,R2 ; ptrcan
 000004BA  6001      STR         R1,[R0,#0x0] ; ptrcan
  213:   return CAN_OK;
 000004BC  2000      MOV         R0,#0x0
 000004BE            ; SCOPE-END
  214: }
 000004BE  4770      BX          R14
 000004C0            ; END 'CAN_hw_start?T'

 000004C0  40000008  DD          CAN_BASE		; POOL-Entry U=1

*** Disassembly of Segment '?PR?CAN_hw_tx_empty?T?CAN_hw':
 FILE: 'CAN_hw.c'
 000004C4          CAN_hw_tx_empty?T:  ; FUNCTION START
  226: CAN_ERROR CAN_hw_tx_empty (U32 ctrl)  {
 000004C4  1C01      MOV         R1,R0 ; ctrl
 000004C6  ---- Variable 'ctrl' assigned to Register 'R1' ----
 000004C6            ; SCOPE-START
  227:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 000004C6  1C08      MOV         R0,R1 ; ctrl
 000004C8  3801      SUB         R0,#0x1
 000004CA  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  228:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 000004CA  1C01      MOV         R1,R0 ; ctrl0
 000004CC  0089      LSL         R1,R1,#0x2 ; ctrl0
 000004CE  4805      LDR         R0,[R15,#20] ; PoolRef @0x4E4 ; CAN_BASE
 000004D0  5841      LDR         R1,[R0,R1]
 000004D2  ---- Variable 'ptrcan' assigned to Register 'R1' ----
  230:   if (!(ptrcan->CANSR & 0x00000004))  /* Transmitter 1 busy                  */
 000004D2  1C08      MOV         R0,R1 ; ptrcan
 000004D4  69C0      LDR         R0,[R0,#0x1C]
 000004D6  2104      MOV         R1,#0x4
 000004D8  4208      TST         R0,R1
 000004DA  D101      BNE         L_11  ; T=0x000004E0
  231:     return CAN_TX_BUSY_ERROR;
 000004DC  2004      MOV         R0,#0x4
 000004DE  E000      B           L_12  ; T=0x000004E2
 000004E0          L_11:
  233:   return CAN_OK;
 000004E0  2000      MOV         R0,#0x0
LARM LINKER/LOCATER V2.32a                                                            03/15/2007  08:58:24  PAGE 15


 000004E2            ; SCOPE-END
  234: }
 000004E2          L_12:
 000004E2  4770      BX          R14
 000004E4            ; END 'CAN_hw_tx_empty?T'

 000004E4  40000008  DD          CAN_BASE		; POOL-Entry U=1

*** Disassembly of Segment '?PR?CAN_hw_wr?T?CAN_hw':
 FILE: 'CAN_hw.c'
 000004E8          CAN_hw_wr?A PROC ARM   
 000004E8  E59FC000  LDR         R12,[R15]
 000004EC  E12FFF1C  BX          R12
 000004F0  000004F5  DD          CAN_hw_wr?T
 000004F4          ENDP      

 000004F4          CAN_hw_wr?T:  ; FUNCTION START
  247: CAN_ERROR CAN_hw_wr (U32 ctrl, CAN_msg *msg)  {
 000004F4  B410      PUSH        {R4}
 000004F6  ---- Variable 'msg' assigned to Register 'R1' ----
 000004F6  1C02      MOV         R2,R0 ; ctrl
 000004F8  ---- Variable 'ctrl' assigned to Register 'R2' ----
 000004F8            ; SCOPE-START
  248:   U32 ctrl0 = ctrl-1;                 /* Controller index 0 .. x-1           */
 000004F8  1C10      MOV         R0,R2 ; ctrl
 000004FA  3801      SUB         R0,#0x1
 000004FC  ---- Variable 'ctrl0' assigned to Register 'R0' ----
  250:   regCAN *ptrcan = (regCAN *) CAN_BASE[ctrl0];
 000004FC  1C02      MOV         R2,R0 ; ctrl0
 000004FE  0092      LSL         R2,R2,#0x2 ; ctrl0
 00000500  481B      LDR         R0,[R15,#108] ; PoolRef @0x570 ; CAN_BASE
 00000502  5882      LDR         R2,[R0,R2]
 00000504  ---- Variable 'ptrcan' assigned to Register 'R2' ----
  252:   CANData       = (((U32) msg->len) << 16)          & 0x000F0000 | 
 00000504  1C08      MOV         R0,R1 ; msg
 00000506  7B80      LDRB        R0,[R0,#0xE]
 00000508  2801      CMP         R0,#0x1
 0000050A  D101      BNE         L_13  ; T=0x00000510
 0000050C  2001      MOV         R0,#0x1
 0000050E  E000      B           L_14  ; T=0x00000512
 00000510          L_13:
 00000510  2000      MOV         R0,#0x0
 00000512          L_14:
 00000512  07C0      LSL         R0,R0,#0x1F
 00000514  1C0B      MOV         R3,R1 ; msg
 00000516  7B1B      LDRB        R3,[R3,#0xC]
 00000518  1C1C      MOV         R4,R3
 0000051A  0424      LSL         R4,R4,#0x10
 0000051C  4B15      LDR         R3,[R15,#84] ; PoolRef @0x574
 0000051E  401C      AND         R4,R3
 00000520  4304      ORR         R4,R0
 00000522  1C08      MOV         R0,R1 ; msg
 00000524  7BC0      LDRB        R0,[R0,#0xF]
 00000526  2801      CMP         R0,#0x1
 00000528  D101      BNE         L_15  ; T=0x0000052E
 0000052A  2001      MOV         R0,#0x1
 0000052C  E000      B           L_16  ; T=0x00000530
 0000052E          L_15:
 0000052E  2000      MOV         R0,#0x0
 00000530          L_16:
 00000530  0780      LSL         R0,R0,#0x1E
 00000532  4304      ORR         R4,R0
 00000534  ---- Variable 'CANData' assigned to Register 'R4' ----
  256:   if (ptrcan->CANSR & 0x00000004)  {  /* Transmit buffer 1 free              */
 00000534  1C10      MOV         R0,R2 ; ptrcan
LARM LINKER/LOCATER V2.32a                                                            03/15/2007  08:58:24  PAGE 16


 00000536  69C0      LDR         R0,[R0,#0x1C]
 00000538  2304      MOV         R3,#0x4
 0000053A  4218      TST         R0,R3
 0000053C  D012      BEQ         L_17  ; T=0x00000564
  257:     ptrcan->CANTF1  = CANData;        /* Write frame informations            */
 0000053E  1C20      MOV         R0,R4 ; CANData
 00000540  1C13      MOV         R3,R2 ; ptrcan
 00000542  6318      STR         R0,[R3,#0x30]
  258:     ptrcan->CANTID1 = msg->id;        /* Write CAN message identifier        */
 00000544  1C08      MOV         R0,R1 ; msg
 00000546  6800      LDR         R0,[R0,#0x0] ; msg
 00000548  1C13      MOV         R3,R2 ; ptrcan
 0000054A  6358      STR         R0,[R3,#0x34]
  259:     ptrcan->CANTDA1 = *(U32 *) &msg->data[0]; /* Write first 4 data bytes    */
 0000054C  1C08      MOV         R0,R1 ; msg
 0000054E  6840      LDR         R0,[R0,#0x4]
 00000550  1C13      MOV         R3,R2 ; ptrcan
 00000552  6398      STR         R0,[R3,#0x38]
  260:     ptrcan->CANTDB1 = *(U32 *) &msg->data[4]; /* Write second 4 data bytes   */
 00000554  1C08      MOV         R0,R1 ; msg
 00000556  6880      LDR         R0,[R0,#0x8]
 00000558  1C11      MOV         R1,R2 ; ptrcan
 0000055A  63C8      STR         R0,[R1,#0x3C]
  261:     ptrcan->CANCMR  = 0x30;           /* Start self-transmission             */
 0000055C  2030      MOV         R0,#0x30
 0000055E  1C11      MOV         R1,R2 ; ptrcan
 00000560  6048      STR         R0,[R1,#0x4]
  262:   }
 00000562  E001      B           L_18  ; T=0x00000568
 00000564          L_17:
  264:     return CAN_TX_BUSY_ERROR;
 00000564  2004      MOV         R0,#0x4
 00000566  E000      B           L_19  ; T=0x0000056A
 00000568          L_18:
  266:   return CAN_OK;
 00000568  2000      MOV         R0,#0x0
 0000056A            ; SCOPE-END
  267: }
 0000056A          L_19:
 0000056A  BC10      POP         {R4}
 0000056C  4770      BX          R14
 0000056E            ; END 'CAN_hw_wr?T'

 0000056E            ALIGN       4
 00000570  40000008  DD          CAN_BASE		; POOL-Entry U=1
 00000574  000F0000  DD          0xF0000		; POOL-Entry U=1

*** Disassembly of Segment '?PR?CAN_hw_set?T?CAN_hw':
 FILE: 'CAN_hw.c'
 00000578          CAN_hw_set?T:  ; FUNCTION START
  319: CAN_ERROR CAN_hw_set (U32 ctrl, CAN_msg *msg)  {
  323:   return CAN_NOT_IMPLEMENTED_ERROR;
 00000578  2001      MOV         R0,#0x1
  324: }
 0000057A  4770      BX          R14
 0000057C            ; END 'CAN_hw_set?T'


*** Disassembly of Segment '?PR?CAN_hw_rx_object?T?CAN_hw':
 FILE: 'CAN_hw.c'
 0000057C          CAN_hw_rx_object?T:  ; FUNCTION START
  340: CAN_ERROR CAN_hw_rx_object (U32 ctrl, U32 ch, U32 id, CAN_FORMAT format)  {
 0000057C  B5F8      PUSH        {R3-R7,LR}
 0000057E  1C16      MOV         R6,R2 ; id
 00000580  ---- Variable 'id' assigned to Register 'R6' ----
LARM LINKER/LOCATER V2.32a                                                            03/15/2007  08:58:24  PAGE 17


 00000580  1C05      MOV         R5,R0 ; ctrl
 00000582  ---- Variable 'ctrl' assigned to Register 'R5' ----
 00000582  B084      SUB         R13,#0x10
 00000584  ---- Variable 'cnt1' assigned to Register 'R4' ----
 00000584  ---- Variable 'buf0' assigned to Register 'R3' ----
 00000584            ; SCOPE-START
  343:   regCAN_AF    *ptrcan_af    = CAN_AF_BASE;
 00000584  48CB      LDR         R0,[R15,#812] ; PoolRef @0x8B4
 00000586  9000      STR         R0,[R13,#0x0] ; ptrcan_af
  344:   regCAN_AFRAM *ptrcan_afram = CAN_AFRAM_BASE;
 00000588  49CB      LDR         R1,[R15,#812] ; PoolRef @0x8B8
 0000058A  ---- Variable 'ptrcan_afram' assigned to Register 'R1' ----
  352:   if ((((CAN_std_cnt + 1) >> 1) + CAN_ext_cnt) >= 512)
 0000058A  48CC      LDR         R0,[R15,#816] ; PoolRef @0x8BC ; CAN_std_cnt
 0000058C  8802      LDRH        R2,[R0,#0x0] ; CAN_std_cnt
 0000058E  0412      LSL         R2,R2,#0x10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -