查看: 3438|回复: 1

结合mkd下的启动和初始化文件和官方软件包搭建IAR下开发...

[复制链接]
  • TA的每日心情
    无聊
    2014-12-25 15:47
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-1-14 21:02:20 | 显示全部楼层 |阅读模式
    分享到:
    习惯了在MDK下的开发方式,中断向量表和时钟初始化在进入main函数前就已经完成,但是在IAR下SAM-4s官方提供的软件包没有这两个文件,怎么办?把他们移植过来步就行了,怎么移植?分两步
    1. 修改sam4s.s文件,具体做法是在IAR下找到ST的任意一个.s文件,将中断向量表,默认中断服务函数等修改一下名称,将多余的中断服务函数向量表项删除掉就差不多了。我的st的汇编文件在如下目录

    这里面任意一个都行
    sam4s.s在mdk的startup文件夹下有,可参考下面目录,另外一个c文件是第二步需要修改的文件

    修改方法很简单,还可以参考IAR提供的帮助文档

    第二步修改system_SAM4S.c文件,将修改好的的.s文件和这个c文件加入建立好的工程模版里,方法可参考
    https://www.cirmall.com/bbs/thread-6412-1-1.html
    只加入基本驱动库,而且需要将里面的USB驱动文件去掉,编译,会报错,仔细研究报错的选项,是一下宏定义没有,在mdk下通用建一个空白的工程,将报错的宏定义在mdk下查找出来,全部复制到system_SAM4S.c文件的前面,直到不报错为止。
    第三步:测试
    测试1:利用systic定时器产生定时中断来控制LED2闪烁的频率,比较system_SAM4S.c 和sam4s.s 包含和步包含在工程中时,闪烁频率的变化。无初始化时默认应该是片内振荡器提供时钟频率,应该是12M,
    测试2:设置外部按键中断,编写中断服务函数改变LED1的闪烁频率,测向量表是否工作正常。

    main.c文件
    #include "SAM4S16C.h"
    #include "chip.h"

    unsigned systicks=0;
    unsigned dlyMs=0;                    //延时时间,可通过按键中断服务函数修改
    void delayMs(uint32_t n)
    {
      unsigned int tmp;
      tmp=120*200*n;
      while(tmp--);
    }
    void LedInit()
    {
      Pin LedInitStruct;
      LedInitStruct.mask=PIO_PC10|PIO_PC17;
      LedInitStruct.pio=PIOC;
      LedInitStruct.id=ID_PIOC;
      LedInitStruct.type=PIO_OUTPUT_0;
      LedInitStruct.attribute=PIO_PULLUP;
      PIO_Configure(&LedInitStruct,1);
    }

    void KeyInit()
    {
      Pin KeyInitStruct;
      KeyInitStruct.mask=PIO_PA5;
      KeyInitStruct.pio=PIOA;
      KeyInitStruct.id=ID_PIOA;
      KeyInitStruct.type=PIO_INPUT;
      KeyInitStruct.attribute=PIO_PULLUP|PIO_IT_AIME|PIO_IT_FALL_EDGE;
      PIO_Configure(&KeyInitStruct,1);
      PIOA->PIO_IER|=1<<5;
      NVIC_EnableIRQ(PIOA_IRQn);
    }

    void UartInit()
    {


    }
    int main()
    {
      LedInit();                   //初始化LED
      KeyInit();                   //初始化按键为中断输入,下降沿触发
      SysTick_Config(12000000);    //初始化系统定时器,定时间隔约为100毫秒
      dlyMs=300;
    while(1)
    {
       PIOC->PIO_SODR|=PIO_SODR_P10;
       delayMs(dlyMs);
       PIOC->PIO_CODR|=PIO_CODR_P10;
       delayMs(dlyMs);
    }
    }

    void SysTick_Handler()
    {   
           systicks++;
         if(systicks%2==1)
          PIOC->PIO_SODR|=PIO_SODR_P17;         //熄灭LED2
         else
          PIOC->PIO_CODR|=PIO_CODR_P17;         //点亮
    }
    void PIOA_IrqHandler()                      //按键中断服务函数
    {
        static unsigned i=0;
        uint32_t status;
         i++;
        /* Read PIO controller status */
        status = PIOA->PIO_ISR;
        status &= PIOA->PIO_IMR;
        if(i%3==1)
         dlyMs=200;
        else if(i%3==2)
         dlyMs=100;
        else
          dlyMs=300;
    }

    将编译好的工程下载到板上,观察两个灯的闪烁频率,按BP2按键,观察LED1的闪烁频率是否改变
    将sam4s.s和system_SAM4S.c从工程中移除,重新编译下载,重新观察上面的现象,可以看到闪烁频率明显变慢
    a4.jpg a4.jpg

    工程在附件里,大小限制,分为两卷了
                      


    复件 libchip_sam4s.part02.rar

    4.57 MB, 下载次数: 14

    复件 libchip_sam4s.part01.rar

    5.72 MB, 下载次数: 9

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-25 12:42
  • 签到天数: 692 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-1-14 21:59:23 | 显示全部楼层
    楼主,IAR下有专门的启动文件,我已经找到了,明天传一份上来
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-20 09:58 , Processed in 0.120106 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.