tonyos学习笔记之二 GPIO驱动

 

    TelosB开发平台的MSP430拥有端口P1P2P3P4P5P6,其中P1P2具有输入/输出、中断、外部模块功能,而P3P4P5P6不具备中断功能,其余功能同P1P2

TinyOS中与GPIO相关的接口有MSP430GeneralIOMSP430Interrupt

    首先我们通过一个简单的例子来看一下接口MSP430GeneralIO的用法,此例子在TinyOS中不存在,共有两个代码文件:testGPIO.nctestGPIOM.nc,其功能是用P6.6输出周期为1S的方波。当然还有一个Makefile文件,在此不作介绍。

其代码如下,首先是配件文件:

//testGPIO.nc

configuration testGPIO

{}

implementation

{

    components Main

               ,MSP430GeneralIOC

              ,TimerC

              ,testGPIOM

              ,LedsC

              ;

    Main.StdControl -> TimerC;

    Main.StdControl -> testGPIOM;

    testGPIOM.Timer -> TimerC.Timer[unique("Timer")];

    testGPIOM.Leds  -> LedsC;

     /*将使用到GPIO连接到组件中的Port66*/

    testGPIOM.Port66 -> MSP430GeneralIOC.Port66;

}

然后是模块文件:

module testGPIOM

{

    provides interface StdControl;

 

    uses interface Timer;

     /*声明使用接口MSP430GeneralIO,为了容易明白使用的是哪个引脚,一般用as    

       关键字声明一个别名*/

    uses interface MSP430GeneralIO as Port66;

    uses interface Leds;

}

implementation{

  uint8_t isHigh;

 

 command result_t StdControl.init()

 {

    atomic isHigh = 0;

 

    call Port66.setLow();       //使之输出低电平

    call Port66.makeOutput();   //使之可以用于输出

    call Port66.selectIOFunc(); //选择I/0功能

   

    call Leds.init();

 

    return SUCCESS;

 }

 command result_t StdControl.start()

 {

    call Timer.start(TIMER_REPEAT, 512);

 

    return SUCCESS;

 }

 command result_t StdControl.stop()

 {

    call Timer.stop();

 

    return SUCCESS;

 }

 

 task void squareness()

 {

    if(isHigh)

    {

        atomic isHigh = 0;

        call Port66.setHigh();      //输出高电平

    }

    else

    {

        atomic isHigh = 1;

        call Port66.setLow();      //输出低电平

    }

 }

 

 event result_t Timer.fired()

 {

    call Leds.redToggle();

    post squareness();

 

    return SUCCESS;

 }

}

在此程序中,接口MSP430GeneralIO的使用已经注释得很清楚了。需要提醒一下的是,使用之前要对其进行设置,首先是语句call Port66.makeOutput(),使之可以输出;然后是语句call Port66.selectIOFunc() 选择其I/O功能;之后就可以自由输出高或低电平(如task squareness所示)。

你可能感兴趣的:(timer,Module,command,interface,makefile,Components)