打印

资源分享——如何利用IAR底层驱动操作GPIO

[复制链接]
1269|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
waitingf|  楼主 | 2014-10-30 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一篇 利用IAR提供的底层驱动来实现IO口的基本控制。
1.1 输出高、底电平
首先打开IAR,接着

接下来就建立一个空的文档。
这个工程里面,包含了所有的芯片底层驱动,串口,日历,中断,串口等。
  
打开这两个文件就可以学习关于IO口操作的程序了
里面主要有 输出高低电平、反转、I/O口中断等。

在新建的文档下输入:
例程1:
//跑马灯
#include "driverlib.h"
void delay(unsigned int i)
{
  while(i--);  
}

void main(void)
{
        //Stop WDT
        WDT_A_hold(WDT_A_BASE);

        //PA.x output
        GPIO_setAsOutputPin(GPIO_PORT_P1,0x01);            
        GPIO_setAsOutputPin(GPIO_PORT_P4,0x40);               
    /*
         * Disable the GPIO power-on default high-impedance mode to activate
         * previously configured port settings
         */

         PMM_unlockLPM5(PMM_BASE);//不解锁不能操作I/O

        //Set all PA pins HI
           while(1)
          {

             GPIO_setOutputHighOnPin(GPIO_PORT_P1,0x01);            
             GPIO_setOutputHighOnPin(GPIO_PORT_P4,0x40);

             delay(50000);
             GPIO_setOutputLowOnPin(GPIO_PORT_P1,0x01);   
             GPIO_setOutputLowOnPin(GPIO_PORT_P4,0x40);
             delay(50000);
          }
        //Enter LPM4 w/interrupts enabled
      // __bis_SR_register(LPM4_bits + GIE);
        //For debugger
     // __no_operation();
}
例程2:
//按键中断 按S1触发中断,进入中断后LED1反转
#include "driverlib.h"
void main(void)
{
        //Stop watchdog timer
        WDT_A_hold(WDT_A_BASE);

        //Set P1.0 to output direction
        GPIO_setAsOutputPin( GPIO_PORT_P1, GPIO_PIN0 );

        //Enable P1.1 internal resistance as pull-Up resistance
        GPIO_setAsInputPinWithPullUpresistor(GPIO_PORT_P1,GPIO_PIN1);

        //P1.1 interrupt enabled
        GPIO_enableInterrupt( GPIO_PORT_P1,GPIO_PIN1 );

        //P1.1 Hi/Lo edge
        GPIO_interruptEdgeSelect(
                GPIO_PORT_P1,
                GPIO_PIN1,
                GPIO_HIGH_TO_LOW_TRANSITION
                );


        //P1.1IFG cleared
        GPIO_clearInterruptFlag(
                GPIO_PORT_P1,
                GPIO_PIN1
                );

        /*
         * Disable the GPIO power-on default high-impedance mode to activate
         * previously configured port settings
         */
        PMM_unlockLPM5(PMM_BASE);

        //Enter LPM4 w/interrupt
        __bis_SR_register(LPM4_bits + GIE);

        //For debugger
        __no_operation();
}

//******************************************************************************
//
//This is the PORT1_VECTOR interrupt vector service routine
//
//******************************************************************************
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
        //P1.0 = toggle
        GPIO_toggleOutputOnPin(
                GPIO_PORT_P1,
                GPIO_PIN0
                );


        //P1.4 IFG cleared
        GPIO_clearInterruptFlag(
                GPIO_PORT_P1,
                GPIO_PIN1
                );
}

个人感悟:
摸索半天终于,弄明白这些东西了。不是自己的驱动,还是得耐心学。
相对于CCS,IAR还是比较方便。

相关帖子

沙发
waitingf|  楼主 | 2014-10-30 10:02 | 只看该作者
感觉很好 分享给大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

1138

帖子

3

粉丝