tinyos的串口模块分析

tinyOS中提供了配置USART模块的两个组件

    HPLUSART1M组件(位置:tinyos-1.x/tos./plarform/telosb/HPLUSART1M.nc

    HPLUARTM组件(位置:tinyos-1.x/tos/platform/telosb/ HPLUARTM.nc)

(1). HPLUSART1M组件(位置:tinyos-1.x/tos./plarform/telosb/HPLUSART1M.nc

 HPLUART1M组件提供了对MSP430UART硬件模块的所有配置,是Tinyos中直接控制硬件的最底层组件,可以通过调用HPLUART1M提供的命令对UART所有寄存器进行设置,实现我们需要的功能。同时HPLUART1M通过自己提供的事件,把接受到的数据通知上层组件。HPLUART1M为上层组件提供了HPLUSARTControlHPLUSARTFeedback接口。

 在调试中我们使用的是UART 模式,用到的命令和事件有:

   TOSH_SIGNAL(UART1RX_VECTOR) {

    uint8_t temp = U1RXBUF;

    signal USARTData.rxDone(temp);       //接收中断

  }

  TOSH_SIGNAL(UART1TX_VECTOR) {          //发送中断

    signal USARTData.txDone();

  }

  async command bool USARTControl.isUART() //判断工作模式是UART

  async command bool USARTControl.isUARTtx()//发送模式

  async command bool USARTControl.isUARTrx() //接收模式

  async command msp430_usartmode_t USARTControl.getMode()//获取工作模式

  async command void USARTControl.setMode()//设置工作模式

  async command void USARTControl.enableUART()//使能UART

  async command void USARTControl.disableUART()//关闭UART

  async command void USARTControl.enableUARTTx()//使能UART的发送状态

  async command void USARTControl.disableUARTTx()//关闭UART的发送状态

  async command void USARTControl.enableUARTRx()//使能UART的接收状态

  async command void USARTControl.disableUARTRx()//关闭UART的接收状

  async command void USARTControl.setModeUART_TX()//设置发送工作模式

  async command void USARTControl.setModeUART_RX()//设置接收工作模式

  async command void USARTControl.setModeUART()//设置UART工作模式

  async command void USARTControl.setClockSource()//设置时钟源

  async command void USARTControl.setClockRate()//设置波特率

  async command result_t USARTControl.disableRxIntr()//禁止接收中断

  async command result_t USARTControl.disableTxIntr()//禁止发送中断

  async command result_t USARTControl.enableRxIntr()//使能接收中断

  async command result_t USARTControl.enableTxIntr()//使能发送中断

  async command result_t USARTControl.tx()//发送数据

  async command uint8_t USARTControl.rx()//接收数据

  default async event result_t USARTData.txDone()//发送完成,上层组件实现

  default async event result_t USARTData.rxDone()//接收完成,向上层传递数据

(2).HPLUARTM组件(位置:tinyos-1.x/tos/platform/telosb/ HPLUARTM.nc)

   HPLUSARTM组件是HPLUART1M的上层组件,通过HPLUART1M提供的HPLUSARTControlHPLUSARTFeedback接口,调用HPLUART1M的命令实现对硬件的控制。同时也为实际的Tinyos应用程序提供了HPLUART接口。

   async command result_t UART.init() {             //初始化

    call USARTControl.setModeUART();                //设置UART模式 

    call USARTControl.setClockSource(SSEL_ACLK);    //时钟源为ACK

    call USARTControl.setClockRate(UBR_ACLK_57600, UMCTL_ACLK_57600);//波特率57600   

    call USARTControl.enableRxIntr();

    call USARTControl.enableTxIntr();              //使能中断

    return SUCCESS;

  }

 

  async command result_t UART.stop() {

    call USARTControl.disableRxIntr();

call USARTControl.disableTxIntr();         //禁止中断

call USARTControl.disableUART();           //禁止UART,可以工作在低功耗模式

    return SUCCESS;

  }

 

  async event result_t USARTData.rxDone(uint8_t b) {  //实现HPLUART1M中的事件,获得数据传给b

    return signal UART.get(b);                        //通知UART.get()

  }

 

  async event result_t USARTData.txDone() {          

    return signal UART.putDone();

  }

 

  async command result_t UART.put(uint8_t data){     //发送数据

    return call USARTControl.tx(data);               //调用HPLUART1M中的发送命令,把data发送出去

  }

  //应用组件实现,获得数据data

  default async event result_t UART.get(uint8_t data) { return SUCCESS; }

 

  default async event result_t UART.putDone() { return SUCCESS; }

}

(3)工作流程

   数据接收:串口接收到数据,产生中断TOSH_SIGNAL(UART1RX_VECTOR),读接收缓存中的数据temp = U1RXBUF,通知signal USARTData.rxDone(temp),在HPLUART中实现事件USARTData.rxDone(),通知signal UART.get(b)bdata,在应用程序中实现UART.get(),处理数据。

   数据发送:发送数据,产生中断TOSH_SIGNAL(UART1TX_VECTOR),通知signal USARTData.txDone(),在HPLUART中实现事件USARTData.txDone(),通知UART.putDone(),在应用程序中实现UART.putDone(),处理发送事件。

你可能感兴趣的:(tinyos的串口模块分析)