初步探討Zigbee之外設IO(串口,備用位置)

UART

一般發送用查詢,接收用中斷。
CC2530的外設功能可用作串口,ADC,定時器,DMA等等。串口0,串口1,分別可以放在兩個不同的備用位置。
(容易混淆)
這裏我們就需要隱射

串口

UART1

圖片可以看出來UATRT0,UART1,分別可以隱射到P0,P1(即備用位置1,備用位置2)

下面的表格是指定都在P0位置的外設的優先級


這裏寫圖片描述

設置端口0的UART0優先

P2DIR&=~(3<<6);

下面的表格是指定都在P1,P2位置的外設的優先級


這裏寫圖片描述

設置端口1的UART0優先

P2SEL&=~(1<<6);

個人總結

  1. 確定串口位置設置IO爲外設功能
  2. 配置對應優先級
  3. 確定在那個端口

假設cc2530的硬件連接爲

Usart0_Rx P0_2
Usart0_Tx P0_3

    P0SEL |= 0x0c;   //設置P0_2,P0_3 用作外設串口
        P2DIR &= ~0XC0;  //P0優先作爲UART0使用
    PERCFG  &= ~0x01;//將USART0安排在P0口

許久沒寫驅動,清晰了不少,是不是很簡單?

結合時鐘管理之後一起綜合~

//#ifndef __uart_H__
//#define __uart_H__


#include<iocc2530.h>
void uartinit();
void myprintf(char *data);
void clockinit();

uart.c

#include "uart.h"
void uartinit()
{
   P0SEL|=0X3C;      //設置爲外設功能
   PERCFG&=~(1<<0);    //備用位置1優先
   P2DIR&=~(3<<6);     //設置串口0優先
   U0CSR|=(1<<7);     //使用串口模式
   U0BAUD|=216;        //波特率 57600
   U0GCR|=10;       //U0GCR |=10;

   UTX0IF=0;      //  UTX0IF=0,清除標誌位
   U0CSR|=0X40;      //使能接收器
   IEN0|=(1<<2);      //使能串口0中斷
   IEN0|=(1<<7);    //開總中斷
}

void myprintf(char *data)
{
   while(*data!='\0')
   {
      U0DBUF= *data++;
      while(UTX0IF==0);  //  (U0CSR & 0X02)
      UTX0IF=0;
          //U0CSR &=~0X02;
   }
}
void clockinit()
{
  CLKCONCMD &=~(1<<6);
  while((SLEEPSTA & 0X40) ==0);
  CLKCONCMD &=~0X47;
  SLEEPCMD|=0X04;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章