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

📄 can_ex1.lst

📁 can bus 源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.32a,  CAN_Ex1                                                              15/03/07  08:58:24  PAGE 1   


ARM COMPILER V2.32a, COMPILATION OF MODULE CAN_Ex1
OBJECT MODULE PLACED IN .\obj\CAN_Ex1.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe CAN_Ex1.c THUMB OPTIMIZE(7,SPEED) DEBUG CODE PRINT(.\LST\CAN_EX1.LST) TABS(3
                    -) OBJECT(.\obj\CAN_Ex1.obj) 

stmt  level    source

    1          /*----------------------------------------------------------------------------
    2           *      A R T X   C A N   D r i v e r   E x a m p l e   1
    3           *----------------------------------------------------------------------------
    4           *      Name:    CAN_Ex1.c
    5           *      Purpose: ARTX CAN Driver usage example
    6           *      Rev.:    V0.20 / october-14-2005
    7           *----------------------------------------------------------------------------
    8           *      This code is part of the ARTX-ARM kernel package of Keil Software.
    9           *      Copyright (c) 2004-2005 Keil Software. All rights reserved.
   10           *---------------------------------------------------------------------------*/
   11          
   12          #include <ARTX.h>                     /* ARTX kernel functions & defines     */
   13          #include <LPC21xx.h>                  /* LPC21xx definitions                 */
   14          #include "ARTX_CAN.h"                 /* CAN Generic functions & defines     */ 
   15          
   16          
   17          #define        ONLY_CAN_PROG        1
   18          
   19          
   20          #define     NOP()      __asm{NOP}
   21          #define     RESET_WATCH_DOG      { IODIR0 |= (1<<11); NOP();   NOP();\
   22                                             IOCLR0 |= (1<<11); NOP();   NOP();\
   23                                             IOSET0 |= (1<<11); NOP();   NOP();\
   24                                             IOCLR0 |= (1<<11); NOP();   NOP();\
   25                                             IOSET0 |= (1<<11); NOP();   NOP();\
   26                                           } ;
   27          
   28          
   29          
   30          
   31          OS_TID tsk1;                          /* Assigned identification for task 1  */
   32          OS_TID tsk2;                          /* Assigned identification for task 1  */
   33          
   34          void task_send_CAN (void) __task;     /* Task that sends CAN message         */
   35          void task_rece_CAN (void) __task;     /* Task that receives CAN message      */
   36          
   37          
   38          
   39          
   40          unsigned char get_AD (void);          /* A/D potentiometer value readout     */
   41          
   42          /*----------------------------------------------------------------------------
   43           *  LED Functions
   44           *---------------------------------------------------------------------------*/
   45          
   46          void LED_Init (void) {
   47   1        IODIR1 = 0x00FF0000;                /* P1.16..22 defined as Outputs        */
   48   1      }
   49          
   50          void LED_Byte (unsigned char LED_state) {
   51   1        IOCLR1 = 0x00FF0000;
   52   1        IOSET1 = ((unsigned int) LED_state) << 16 & 0x00FF0000;
   53   1      }
   54          
   55          
   56          
   57          
   58          /*----------------------------------------------------------------------------
ARM COMPILER V2.32a,  CAN_Ex1                                                              15/03/07  08:58:24  PAGE 2   

   59           *  Task 1:  Sends message with AD value in data[0] over CAN periodically
   60           *---------------------------------------------------------------------------*/
   61          
   62          void task_send_CAN (void) __task  {
   63   1        /* Initialize message  = { ID, {data[0] .. data[7]}, LEN, CHANNEL, FORMAT, TYPE } */
   64   1        CAN_msg msg_send       = { 33, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},   
   65   1                                    1, 2, STANDARD_FORMAT, DATA_FRAME };
   66   1      
   67   1        CAN_init (1, 500000);               /* CAN controller 1 init, 500 kbit/s   */
   68   1        CAN_init (2, 500000);               /* CAN controller 2 init, 500 kbit/s   */
   69   1      
   70   1        /* Transmit object does not have to be enabled but channel has to be 
   71   1           reserved for tansmitting, in this example channel 1 is reserved for 
   72   1           transmission                                                            */
   73   1      
   74   1        CAN_rx_object (1, 2,  33, STANDARD_FORMAT); /* Enable reception of         */
   75   1                                            /* message on controller 1, channel is */
   76   1                                            /* not used for LPC (can be set to     */
   77   1                                            /* whatever value), with standard id 33*/
   78   1        CAN_start (1);                      /* Start controller 1                  */
   79   1        CAN_start (2);                      /* Start controller 2                  */
   80   1      
   81   1        tsk1 = os_tsk_self ();              /* Get own task identification number  */
   82   1        tsk2 = os_tsk_create (task_rece_CAN, 0);  /* Start receive task            */
   83   1      
   84   1        for (;;)  {
   85   2          msg_send.data[0] = get_AD ();     /* Data[0] field = analog value from   */
   86   2           
   87   2          RESET_WATCH_DOG;                                 /* potentiometer                       */
   88   2      
   89   2          CAN_send (2, &msg_send, 0x0f00);  /* Send msg_send on controller 2       */
   90   2          os_dly_wait (100);                /* Wait 1 second                       */
   91   2        }
   92   1      }
   93          
   94          
   95          /*----------------------------------------------------------------------------
   96           *  Task 2:  Turns on the LEDs according to data[0] of received CAN message
   97           *---------------------------------------------------------------------------*/
   98          
   99          void task_rece_CAN (void) __task  {
  100   1        CAN_msg msg_rece;
  101   1      
  102   1        for (;;)  {
  103   2          /* When message arrives activate LED for value in data[0] of              
  104   2             arrived message                                                       */
  105   2          if (CAN_receive (1, &msg_rece, 0x00FF) == CAN_OK)  {
  106   3            LED_Byte (msg_rece.data[0]);
  107   3          }
  108   2        }
  109   1      }
  110          
  111          
  112          
  113          
  114          /*----------------------------------------------------------------------------
  115           *  Function for getting the AD conversion
  116           *---------------------------------------------------------------------------*/
  117          
  118          unsigned char get_AD (void)  {
  119   1        unsigned int val;
  120   1      
  121   1        ADCR |= 0x01000000;                 /* Start A/D Conversion                */
  122   1      
  123   1        do  {
  124   2          val = ADDR;                       /* Read A/D Data Register              */
ARM COMPILER V2.32a,  CAN_Ex1                                                              15/03/07  08:58:24  PAGE 3   

  125   2        } 
  126   1        while ((val & 0x80000000) == 0);    /* Wait for end of A/D Conversion      */
  127   1      
  128   1        ADCR &= ~0x01000000;                /* Stop A/D Conversion                 */
  129   1        val = (val >> 8) & 0xFF;            /* Extract AIN0 Value                  */
  130   1      
  131   1        return val;
  132   1      }
  133          
  134          #if(ONLY_CAN_PROG)
  135          /*----------------------------------------------------------------------------
  136           *        Main: Initialize and start ARTX Kernel
  137           *---------------------------------------------------------------------------*/
  138          
  139          void main (void)  {                   /* Program execution starts here       */
  140   1        ADCR   = 0x00270401;                /* Setup A/D: 10-bit AIN0 @ 3MHz       */
  141   1      
  142   1        LED_Init ();                        /* Initialize LED                      */
  143   1        LED_Byte (0);                       /* Turn the LED off                    */
  144   1      
  145   1        os_sys_init (task_send_CAN);        /* Initialize and start task 1         */
  146   1      }
  147          
  148          #else
               
               
               
               
               
               #endif
  155          
  156          
  157          /*----------------------------------------------------------------------------
  158           * end of file
  159           *---------------------------------------------------------------------------*/
ARM COMPILER V2.32a,  CAN_Ex1                                                              15/03/07  08:58:24  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (os_tsk_create_user?T)
 EXTERN CODE16 (os_tsk_self?T)
 EXTERN CODE16 (os_sys_init_user?T)
 EXTERN CODE16 (os_dly_wait?T)
 EXTERN CODE16 (CAN_init?T)
 EXTERN CODE16 (CAN_start?T)
 EXTERN CODE16 (CAN_send?T)
 EXTERN CODE16 (CAN_receive?T)
 EXTERN CODE16 (CAN_rx_object?T)
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         task_send_CAN?T
 PUBLIC         task_rece_CAN?T
 PUBLIC         get_AD?T
 PUBLIC         LED_Init?T
 PUBLIC         LED_Byte?T
 PUBLIC         main
 PUBLIC         tsk1
 PUBLIC         tsk2



*** DATA SEGMENT '?DT0?CAN_Ex1':
 00000000          tsk1:
 00000000            DS          4
 00000004          tsk2:
 00000004            DS          4

*** DATA SEGMENT '?CON?CAN_Ex1':
 00000000          ?tpl?0001:
 00000000           BEGIN_INIT
 00000000  00000021  DD          0x21
 00000004  00        DB          0x0
 00000005  00        DB          0x0
 00000006  00        DB          0x0
 00000007  00        DB          0x0
 00000008  00        DB          0x0
 00000009  00        DB          0x0
 0000000A  00        DB          0x0
 0000000B  00        DB          0x0
 0000000C  01        DB          0x1
 0000000D  02        DB          0x2
 0000000E  00        DB          0x0
 0000000F  00        DB          0x0
 00000010           END_INIT



*** CODE SEGMENT '?PR?LED_Init?T?CAN_Ex1':
   47:   IODIR1 = 0x00FF0000;                /* P1.16..22 defined as Outputs        */
 00000000  4800      LDR         R1,=0xFF0000
 00000002  4800      LDR         R0,=0xE0028018
 00000004  6001      STR         R1,[R0,#0x0]
   48: }
 00000006  4770      BX          R14
 00000008          ENDP ; 'LED_Init?T'


*** CODE SEGMENT '?PR?LED_Byte?T?CAN_Ex1':
   50: void LED_Byte (unsigned char LED_state) {
 00000000  1C01      MOV         R1,R0 ; LED_state

⌨️ 快捷键说明

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