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

📄 main.lst

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.50a,  main                                                                 22/04/06  16:43:25  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe main.c ARM BROWSE DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2            main.c file
    3          
    4            ADuC7027的第八个实验——中断
    5          
    6            作者:Computer-lov
    7            建立日期:2006-4-20
    8            修改日期:2006-4-20
    9            版本:V1.0
   10            版权所有,盗版必究。
   11            任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   12            Copyright(C) Computer-lov 2006-2016
   13            All rights reserved
   14          **********************************************************************************************/
   15          
   16          #include <ADuC7027.H>
   17          #include <../my_type.h>
   18          #include <../LED.H>
   19          #include "interrupt.h"
   20          
   21          volatile uint32 pll_lock;
   22          
   23          /*********************************************************************************************/
   24          void sys_clk_init(void)
   25          {
   26   1       PLLKEY1=0xAA;
   27   1       PLLCON=0x01;   //PLL配置  
   28   1       PLLKEY2=0x55;
   29   1       POWKEY1=0x01;
   30   1       POWCON=0x00;  //CPU时钟配置为41.78MHz
   31   1       POWKEY2=0xF4;
   32   1      // while(!(PLLSTA & 0x01));
   33   1      }
   34          ///////////////////////////////////////////////////////////////////////////////////////////////
   35          
   36          /*********************************************************************************************/
   37          void IRQ_Handler(void) __irq    //IRQ中断服务程序
   38          {
   39   1       if(IRQSTA & EXTERNAL_IRQ0)    //读取IRQ中断状态,判断IRQ中断源
   40   1        {
   41   2         ON_LED4();                  
   42   2         return;
   43   2        }
   44   1      }
   45          ///////////////////////////////////////////////////////////////////////////////////////////////
   46          
   47          /*********************************************************************************************/
   48          void FIQ_Handler(void) __fiq   //FIQ中断服务程序
   49          {
   50   1       if(FIQSTA & EXTERNAL_IRQ1)    //读取FIQ中断状态,判断FIQ中断源
   51   1        {
   52   2         ON_LED5();
   53   2         return;
   54   2        }
   55   1      }
   56          ///////////////////////////////////////////////////////////////////////////////////////////////
   57          
   58          /*********************************************************************************************/
   59          void SWI_0(void) __swi(0)             //0号软中断,打开LED6
ARM COMPILER V2.50a,  main                                                                 22/04/06  16:43:25  PAGE 2   

   60          {
   61   1       ON_LED6();
   62   1      }
   63          
   64          ///////////////////////////////////////////////////////////////////////////////////////////////
   65          
   66          /*********************************************************************************************/
   67          void SWI_1(void) __swi(1)            //1号软中断,打开LED7
   68          {
   69   1       ON_LED7();
   70   1      }
   71          ///////////////////////////////////////////////////////////////////////////////////////////////
   72          
   73          /*********************************************************************************************/
   74          uint32 SWI_2(uint32 a,uint32 b) __swi(2)      //2号软中断,实现两个整数相加
   75          {
   76   1       return a+b;
   77   1      }
   78          ///////////////////////////////////////////////////////////////////////////////////////////////
   79          
   80          /*********************************************************************************************/
   81          void main(void)
   82          {
   83   1      
   84   1       sys_clk_init();
   85   1      
   86   1       EN_LED4();       //使能LED
   87   1       EN_LED5();
   88   1       EN_LED6();
   89   1       EN_LED7();
   90   1       EN_LED8();
   91   1      
   92   1       OFF_LED4();     //初始化关掉LED
   93   1       OFF_LED5();
   94   1       OFF_LED6();
   95   1       OFF_LED7();
   96   1       OFF_LED8(); 
   97   1      
   98   1       SWI_0();  //用软中断的方法来打开LED6
   99   1       SWI_1();  //用软中断的方法来打开LED7
  100   1       if(SWI_2(100,200)==300)      //调用软中断,计算100加200,如果结果等于300,则点亮LED8
  101   1        {
  102   2         ON_LED8();
  103   2        }
  104   1      
  105   1       IRQEN |= EXTERNAL_IRQ0;   //将外部中断0配置成IRQ中断(按键S4)
  106   1       FIQEN |= EXTERNAL_IRQ1;   //将外部中断1配置成FIQ中断(按键S3)
  107   1      
  108   1       while(1)           //由于是高电平触发中断,所以要同时按住S4、S3键才能运行主程序,即熄灭LED
  109   1        {                 //放开某个按键,则进入相应的中断,点亮相应的LED。由于FIQ的优先级高于IRQ,
  110   2         OFF_LED4();      //当先放开S4,后放开S3时,FIQ可中断IRQ,从而能点亮LED5。相反,如果先放开
  111   2         OFF_LED5();      //S3,后放开S4,则IRQ不能中断FIQ,所以不能点亮LED4。
  112   2        }
  113   1      }
  114          ///////////////////////////////////////////////////////////////////////////////////////////////
ARM COMPILER V2.50a,  main                                                                 22/04/06  16:43:25  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         sys_clk_init?A
 PUBLIC         IRQ_Handler?A
 PUBLIC         FIQ_Handler?A
 PUBLIC         SWI_0?A
 PUBLIC         SWI_1?A
 PUBLIC         SWI_2?A
 PUBLIC         main
 PUBLIC         pll_lock



*** DATA SEGMENT '?DT0?main':
 00000000          pll_lock:
 00000000            DS          4



*** CODE SEGMENT '?PR?sys_clk_init?A?main':
   26:  PLLKEY1=0xAA;
 00000000  E3A010AA  MOV         R1,#0xAA
 00000004  E5100000  LDR         R0,=0xFFFF0410
 00000008  E5801000  STR         R1,[R0,#0x0]
   27:  PLLCON=0x01;   //PLL配置  
 0000000C  E3A01001  MOV         R1,#0x1
 00000010  E5100000  LDR         R0,=0xFFFF0414
 00000014  E5801000  STR         R1,[R0,#0x0]
   28:  PLLKEY2=0x55;
 00000018  E3A02055  MOV         R2,#0x55
 0000001C  E5100000  LDR         R0,=0xFFFF0418
 00000020  E5802000  STR         R2,[R0,#0x0]
   29:  POWKEY1=0x01;
 00000024  E5100000  LDR         R0,=0xFFFF0404
 00000028  E5801000  STR         R1,[R0,#0x0]
   30:  POWCON=0x00;  //CPU时钟配置为41.78MHz
 0000002C  E3A01000  MOV         R1,#0x0
 00000030  E5100000  LDR         R0,=0xFFFF0408
 00000034  E5801000  STR         R1,[R0,#0x0]
   31:  POWKEY2=0xF4;
 00000038  E3A010F4  MOV         R1,#0xF4
 0000003C  E5100000  LDR         R0,=0xFFFF040C
 00000040  E5801000  STR         R1,[R0,#0x0]
   33: }
 00000044  E12FFF1E  BX          R14
 00000048          ENDP ; 'sys_clk_init?A'


*** CODE SEGMENT '?PR?IRQ_Handler?A?main':
   37: void IRQ_Handler(void) __irq    //IRQ中断服务程序
 00000000  E92D0003  STMDB       R13!,{R0-R1}
   39:  if(IRQSTA & EXTERNAL_IRQ0)    //读取IRQ中断状态,判断IRQ中断源
 00000004  E5100000  LDR         R0,=0xFFFF0000
 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E3100902  TST         R0,#0x8000
 00000010  0A000002  BEQ         L_2  ; Targ=0x20
   41:    ON_LED4();                  

⌨️ 快捷键说明

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