主题 : Tiny6410的UART裸机调试 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 43869
精华: 0
发帖: 41
金钱: 205 两
威望: 41 点
综合积分: 82 分
注册时间: 2011-04-20
最后登录: 2015-11-10
楼主  发表于: 2013-06-26 16:26

 Tiny6410的UART裸机调试

/*******************************************************************************
定义UART通道2的相关寄存器
*******************************************************************************/
#define    ULCON2            (*(volatile unsigned *)(0x7F005800))
#define    UCON2             (*(volatile unsigned *)(0x7F005804))
#define    UFCON2         (*(volatile unsigned *)(0x7F005808))
#define    UTRSTAT2     (*(volatile unsigned *)(0x7F005810))
#define    UERSTAT2         (*(volatile unsigned *)(0x7F005814))
#define    UFSTAT2         (*(volatile unsigned *)(0x7F005818))
#define    UTXH2            (*(volatile unsigned *)(0x7F005820))
#define    URXH2             (*(volatile unsigned *)(0x7F005824))
#define    UBRDIV2         (*(volatile unsigned *)(0x7F005828))
#define    UDIVSLOT2     (*(volatile unsigned *)(0x7F00582C))
#define    INTP2             (*(volatile unsigned *)(0x7F005830))
#define    UINTSP2         (*(volatile unsigned *)(0x7F005834))
#define    UINTM2         (*(volatile unsigned *)(0x7F005838))

/*******************************************************************************
定义GPIO相关寄存器
*******************************************************************************/
#define GPBCON          (*(volatile unsigned *)(0x7F008020))  
#define GPBPUD           (*(volatile unsigned *)(0x7F008028))
#define GPFCON            (*(volatile unsigned *)(0x7F0080A0))
#define GPFDAT            (*(volatile unsigned *)(0x7F0080A4))

/*******************************************************************************
定义看门狗相关寄存器
*******************************************************************************/
#define WTCON            (*(volatile unsigned *)(0x7E004000))

/*******************************************************************************
定义系统控制器相关寄存器
*******************************************************************************/
#define APLLLOCK         (*(volatile unsigned *)(0x7E00F000))
#define MPLLLOCK         (*(volatile unsigned *)(0x7E00F004))
#define APLLCON         (*(volatile unsigned *)(0x7E00F00C))
#define MPLLCON         (*(volatile unsigned *)(0x7E00F010))
#define CLKSRC             (*(volatile unsigned *)(0x7E00F01C))
#define CLKDIV0         (*(volatile unsigned *)(0x7E00F020))
#define OTHERS             (*(volatile unsigned *)(0x7E00F900))
#define PCLKGATE        (*(volatile unsigned *)(0x7E00F034))

unsigned char Dat;

/*******************************************************************************
函数名称:System_Init
功    能:设置系统时钟,禁止看门狗
输入参数:无
输出参数:无
*******************************************************************************/
static void  System_Init(void)
{
    APLLLOCK=0x0000FFFF;                                           //设置ARM核的PLL_CLOCK为默认值
    MPLLLOCK=0x0000FFFF;                                          //设置系统的PLL_CLOCK为默认值
    
    OTHERS=OTHERS&0xFFFFFF3F;
    while((OTHERS&0xF00)!=0);
    
    CLKDIV0  =0|(0<<4)|(1<<8)|(1<<9)|(3<<12);
    APLLCON =1|(3<<8)|(266<<16)|(1<<31);                  //设置ARM核时钟为533MHz    
    MPLLCON=1|(3<<8)|(266<<16)|(1<<31);                  //设置系统时钟为533MHz
    CLKSRC  =0x00000003;                                            //时钟源选择外部时钟模式
    PCLKGATE=0x8;
    
    WTCON=0;                                                            //关看门狗              

}

/*******************************************************************************
函数名称:Uart_Init
功    能:设置Uart的相关参数
输入参数:无
输出参数:无
*******************************************************************************/
static void Uart_Init(void)
{
    GPBCON &=~0xFF;
    GPBCON |=0x22;             //设置GPB0和GPB1分别为RXD引脚和TXD引脚
    //GPBPUD &=~0xFF;
    //GPBPUD |=0x0A;
    
    
      ULCON2 =0x03;               //数据位宽为8位,无校验,1位停止位
    UCON2  =0x05;               //选择PCLK作为UART的时钟源,禁止超时、出错、发送中断信号,
                                        //发送和接收模式为查询方式
    UFCON2 =0x01;              //禁止FIFO
    
    /****************************************************************************
    波特率的设置,系统的PCLK为66.MHz,根据数据手册第1101页设置UART的波特率,本次实
    验的波特率设置为115200,8n1,计算得DIV_VAL=36.08-1,最后得出UBRDIV2=35,0.08*16
    =1.28  UDIVSLOT2中有1个1
    ****************************************************************************/
    UBRDIV2=35;
    UDIVSLOT2=0x1;
}

void Uart_SendByte(char val)  
{  
   while ((UFSTAT2 & (1<<14)) );   //Wait until THR is empty.      
    UTXH2=val;  
}

unsigned char Uart_GetKey(void)  
{  
    while ((UFSTAT2& (1<<6)) == 0 && (UFSTAT2& 0x3f) == 0);
        return URXH2;        
}
/*******************************************************************************
函数名称:main
功    能:实现UART的发送与接收
输入参数:无
输出参数:无
*******************************************************************************/
void main(void)
{
    System_Init();
    Uart_Init();
    while(1)
    {
      Dat=Uart_GetKey();
      Uart_SendByte(Dat+1);
    }
}

这是我的UART2的源代码,只能发送,不能接收,是怎么回事?
级别: 新手上路
UID: 117613
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2015-07-22
最后登录: 2015-09-30
1楼  发表于: 2015-09-15 17:57
我的裸机程序也一样,能发不能收,你找到解决方案了吗?