UART(2)—从uart发一个字符串给minicom

从我们的uart的TX端发送一个字符串“hello world”给我们PC上的minicom.

***************************************************************************************

test.c文件如下:

#include "uart.h"



void my_memcopy(char *soc,char *dir);
char  *my_memset(char  *s,int c,unsigned int n);
int (*printf)(char *,...) = (void *)0x57e11d4c;
int main()
{
int i = 0;
char buf[15];
char *pbuf=(char *)my_memset((void *)buf,0,15);
my_memcopy("hello world\n",pbuf);


//下面是对uart中寄存器的配置如下:

ULCON0 = 3;
UCON0 = 1|(1<<2)|(2<<10);
/*
DIV_VAL = (PCLK / (bps x 16 ) ) −1
=(66M/(115200*16))-1
=34.8
x/16 = 0.8
x = 16*0.8
x = 12.8 ~ 13
*/
UBRDIV0 = 34;
UDIVSLOT0 =0xDFDD;


while(1){

/*while(1)
{
if(UTRSTAT0&(1<<1))
break;
}
if(*(buf+i)=='\n')
UTXH0 = '\r';//遇到一个\n就会换行,而且在下一行,还会空两格(minicom中的显示就是这样的),这个\r是回到行首。
*/

    while(1){
        if(UTRSTAT0&(1<<1))//判断Tx(发送缓存)是否为空,为空了,我们就可以发送数据了。
            break;
    }
    if(*(buf+i) == 0)
        break;
    else{
        UTXH0 = *(buf+i);  //这里是一个字节,一个字节的发送数据。
        i += 1;
    }
}
return 0;


}
void my_memcopy(char *soc,char *dir)
{
    while(*soc) 
    {
        *dir++ = *soc++;
    }
}

char  *my_memset(char  *s,int c,unsigned int n){
    
    unsigned int i=0; 
    while(i <= n) 
    {
        *(s+i) = c;
        i++;
    }
    return s;

}

**********************************************************************************

uart.h文件如下:

//interrupt
#define VIC0INTENABLE (*(volatile unsigned long *)0x71200010)
#define VIC0INTSELECT (*(volatile unsigned long *)0x7120000C)
#define VICxIRQSTATUS   (*(volatile unsigned long *)0x71200000)
#define VICxRAWINTR (*(volatile unsigned long *)0x71200008)


//模拟watdong
#define VIC0SOFTINT (*(volatile unsigned long *)0x71200018)
#define VIC0SOFTINTCLAR (*(volatile unsigned long *)0x7120001C)
//watdog
#define WTCON    (*(volatile unsigned long *)0x7E004000) 
#define WTDAT    (*(volatile unsigned long *)0x7E004004) 
#define WTCNT    (*(volatile unsigned long *)0x7E004008) 
#define WTCLRINT (*(volatile unsigned long *)0x7E00400C)
//led
#define GPMCON (*(volatile unsigned long *)0x7F008820)
#define GPMDAT (*(volatile unsigned long *)0x7F008824)
//key
#define GPNCON (*(volatile unsigned long *)0x7F008830)
#define GPNDAT (*(volatile unsigned long *)0x7F008834)
//ex_interrupt
#define EINT0CON0    (*(volatile unsigned long *)0x7F008900)
#define EINT0CON1    (*(volatile unsigned long *)0x7F008904)
#define EINT0MASK     (*(volatile unsigned long *)0x7F008920)
#define EINT0PEND    (*(volatile unsigned long *)0x7F008924)
//clock
#define APLLLOCK (*(volatile unsigned long *)0x7E00F000) 
#define MPLLLOCK (*(volatile unsigned long *)0x7E00F004) 
#define EPLLLOCK (*(volatile unsigned long *)0x7E00F008) 
#define APLLCON  (*(volatile unsigned long *)0x7E00F00C) 
#define MPLLCON  (*(volatile unsigned long *)0x7E00F010) 
#define EPLLCON0 (*(volatile unsigned long *)0x7E00F014) 
#define EPLLCON1 (*(volatile unsigned long *)0x7E00F018)




#define CLKSRC       (*(volatile unsigned long *)0x7E00F01C )
#define CLKDIV0      (*(volatile unsigned long *)0x7E00F020 )
#define CLKDIV1      (*(volatile unsigned long *)0x7E00F024 )
#define CLKDIV2      (*(volatile unsigned long *)0x7E00F028 )
#define CLKOUT       (*(volatile unsigned long *)0x7E00F02C )
#define HCLKGATE     (*(volatile unsigned long *)0x7E00F030 )
#define PCLKGATE     (*(volatile unsigned long *)0x7E00F034 )
#define SCLKGATE     (*(volatile unsigned long *)0x7E00F038 )
#define MEM0CLK_GATE (*(volatile unsigned long *)0x7E00F03C)
#define MISCCON (*(volatile unsigned long*)0x7E00F839)


//UART
#define ULCON0   (*(volatile unsigned long *)0x7F005000) 
#define  UCON0   (*(volatile unsigned long *)0x7F005004) 
#define UFCON0   (*(volatile unsigned long *)0x7F005008) 
#define UMCON0   (*(volatile unsigned long *)0x7F00500C) 
#define UTRSTAT0 (*(volatile unsigned long *) 0x7F005010) 
#define UERSTAT0 (*(volatile unsigned long *) 0x7F005014) 
#define UFSTAT0  (*(volatile unsigned long *)0x7F005018) 
#define UMSTAT0  (*(volatile unsigned long *)0x7F00501C) 
#define  UTXH0   (*(volatile unsigned long *)0x7F005020) 
#define  URXH0   (*(volatile unsigned long *)0x7F005024) 
#define UBRDIV0  (*(volatile unsigned long *)0x7F005028) 
#define UDIVSLOT0 (*(volatile unsigned long *)0x7F00502C) 
#define  UINTP0  (*(volatile unsigned long *)0x7F005030) 
#define UINTSP0  (*(volatile unsigned long *)0x7F005034)
#define  UINTM0  (*(volatile unsigned long *)0x7F005038)

*******************************************************************************

 

makefile文件如下:


all:
arm-none-linux-gnueabi-gcc -c test.c -o test.o
arm-none-linux-gnueabi-ld -Ttext=0x50000000 test.o -o test
arm-none-linux-gnueabi-objcopy -Ielf32-littlearm -O binary test test.bin
cp test.bin /tftpboot/
clean:
rm -rf *.o *.bin test vector  /tftpboot/*.bin

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值