初步探讨Zigbee之外设IO(串口,备用位置)

UART

一般发送用查询,接收用中断。
CC2530的外设功能可用作串口,ADC,定时器,DMA等等。串口0,串口1,分别可以放在两个不同的备用位置。
(容易混淆)
这里我们就需要隐射

初步探讨Zigbee之外设IO(串口,备用位置)_第1张图片

初步探讨Zigbee之外设IO(串口,备用位置)_第2张图片

图片可以看出来UATRT0,UART1,分别可以隐射到P0,P1(即备用位置1,备用位置2)

下面的表格是指定都在P0位置的外设的优先级


初步探讨Zigbee之外设IO(串口,备用位置)_第3张图片

设置端口0的UART0优先

P2DIR&=~(3<<6);

下面的表格是指定都在P1,P2位置的外设的优先级


初步探讨Zigbee之外设IO(串口,备用位置)_第4张图片

设置端口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
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;
}

你可能感兴趣的:(CC2530)