Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1009469
  • 博文数量: 81
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 784
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-16 18:26
文章分类

全部博文(81)

文章存档

2014年(1)

2013年(5)

2011年(38)

2010年(37)

我的朋友

分类: 嵌入式

2013-07-27 09:00:41

    让接在IO口上的LED闪烁如同程序员的"hello world!"程序一样,是学习者迈出的第一步。以下介绍我在RealView MDK下

    创建的第一个项目:“让LED闪起来”

    硬件环境:自制的电路班,电路参考了AT91SAM7S-EK
    CPU:AT91SAM7S64
    软件环境:Keil uVersion4 RealView MDK-ARM 4.11
    下载:SAM-BA1.8

    一. 电路

 

    二.项目创建 

        1.在MDK下创建一个新项目,目标器件选择ATMEL的AT91SAM7S64 
        2.MDK提示是否复制默认启动文件并添加到项目时选择“是”
        3.创建一个新的c文件将下面的源程序写入,保存后将此文件添加到项目中
        4.为了在编译是生成SAM-BA所需的BIN格式的目标代码,选中Option for target -> User ->Run User Programs After Build/Rebuild框
          Run#1并在后面的编辑框添入:fromelf.exe --bin -o $L@L.bin #L

    三.程序

    #include     //AT91SAM7S64寄存器定义文件,在RealView Mdk系统包含目录中已经有了这个文件

    #define LED_MASK (1<<7)

    void delay(void)  //尽管在正式的程序中不会使用类似的延时函数,但是在学习或调试阶段此种函数是很有用的
    {
        volatile int i,j;
        for(i=0;i<50;i++)
            for(j=0;j<100000;j++);
    }
    int main(void)
    {
        unsigned int x;

        AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA ; //PIOA时钟使能
        AT91C_BASE_PIOA->PIO_PER = LED_MASK; // PA7设置为PIO 模式
        AT91C_BASE_PIOA->PIO_OER = LED_MASK; // PA7设置为输出模式

        while(1)
        {
          if(x)
          { 
            AT91C_BASE_PIOA->PIO_CODR=LED_MASK;//关LED
            x=0;
          }
          else
          {
            x=1;
            AT91C_BASE_PIOA->PIO_SODR= LED_MASK;//开LED
          }
          delay();
        } 
    }
 

阅读(1254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~