完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人做裸机串口实验,代码运行到开发板上,串口没有任何反应,求救啊~~
以下是代码 start.S .globl _start _start: ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 ldr r0, =0x7E004000 mov r1, #0 str r1, [r0] ldr sp,=8*1024 bl clock_init bl main halt: b halt clock.c #define APLL_LOCK (*(volatile unsigned long *)(0x7E00F000)) //APLL锁定时间 #define MPLL_LOCK (*(volatile unsigned long *)(0x7E00F004)) //MPLL锁定时间 #define EPLL_LOCK (*(volatile unsigned long *)(0x7E00F008)) //EPLL锁定时间 #define OTHERS (*(volatile unsigned long *)(0x7E00F900)) #define CLK_DIV0 (*(volatile unsigned long *)(0x7E00F020)) #define APLL_CON (*(volatile unsigned long *)(0x7E00F00C)) //FOUT = MDIV * FIN / (PDIV X 2^SDIV) #define MPLL_CON (*(volatile unsigned long *)(0x7E00F010)) #define CLK_SRC (*(volatile unsigned long *)(0x7E00F01C)) #define ARM_RATIO 0 //ARMCLK = DOUTAPLL / (ARM_RATIO + 1) #define HCLKX2_RATIO 1 //HCLKX2 = HCLKX2 IN / (HCLKX2_RATIO + 1) #define HCLK_RATIO 1 //HCLK = HCLKX2 / (HCLK_RATIO + 1) #define PCLK_RATIO 3 //PCLK = HCLKX2 / (PCLK_RATIO + 1) #define MPLL_RATIO 0 //DOUT MPLL = MOUTMPLL / (MPLL_RATIO + 1) #define MDIV 266 #define PDIV 3 #define SDIV 1 #define APLL_MPLL_CON_VAL ((1<<31) | (MDIV << 16 ) | (PDIV << 8) | (SDIV)) #define CLK_SRC_VAL 3; //选择FOUT_apll时钟和FOUT_mpll时钟 /******************************************************************** function:初始化时钟 *********************************************************************/ void clock_init() { APLL_LOCK = 0x0000ffff; //APLL设置锁定时间 MPLL_LOCK = 0x0000ffff; //MPLL设置锁定时间 EPLL_LOCK = 0x0000ffff; //EPLL设置锁定时间 OTHERS &= ~(1<<8); //将第8位清0,设置CPU为异步模式,因为CPU时钟不等于HCKL // OTHERS &= ~(1<<6); //设置HLCKX2为MOUT_APLL while(!(OTHERS & 0xf00)); //等待CPU进入异步模式 //设置分频寄存器 CLK_DIV0 = (ARM_RATIO | (HCLKX2_RATIO << 9) | (HCLK_RATIO << 8) | (PCLK_RATIO << 12) | (MPLL_RATIO << 4)); //设置分频寄存器 //设置APLL寄存器 APLL_CON = APLL_MPLL_CON_VAL; //设置MPLL寄存器 MPLL_CON = APLL_MPLL_CON_VAL; //选择时钟源 CLK_SRC = CLK_SRC_VAL; return; } uart.c #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 UFSTAT0 (*((volatile unsigned long *)0x7F005018)) #define UTXH0 (*((volatile unsigned char *)0x7F005020)) #define URXH0 (*((volatile unsigned char *)0x7F005024)) #define UBRDIV0 (*((volatile unsigned short *)0x7F005028)) #define UDIVSLOT0 (*((volatile unsigned short *)0x7F00502C)) #define GPACON (*((volatile unsigned short *)0x7F008000)) void init_uart() { GPACON &= ~0xff; GPACON |= 0x22; ULCON0 = 0x3; //数据位8位,1位停止位,无校验, ULCON0 = 0x5; //使能UART0通道 UFCON0 = 0x01; //使能FIFO UMCON0 = 0; //禁用流量控制 /** * 波特率的算法 * * DIV_VAL = (PCLK / (bps * 16 ) ) - 1 * DIV_VAL = (66500000 / (115200 * 16)) -1 * DIV_VAL = (66500000 / 1843200) - 1 * DIV_VAL = 35.08 * * UBRDIV0为整数部分 * 即 * UBRDIV0 = 35 * * * (UDIVSLOT0里边1的个数) / 16 = 0.08 * (UDIVSLOT0里边1的个数) = 1.28 取整后得 1 */ UBRDIV0 = 35; UDIVSLOT0 = 0x1; } void putc(char c) { while(UFSTAT0 & (1<<14)); UTXH0 = c; } unsigned char getc() { while((UFSTAT0 & 0x7f)); return URXH0; } int main() { char c; init_uart(); while(1) { putc('c'); } return 0; } makefile uart.bin:start.o clock.o uart.o arm-linux-ld -Ttext 0 -o uart.elf start.o clock.o uart.o arm-linux-objcopy -O binary uart.elf uart.bin arm-linux-objdump -D uart.elf > uart.dis %.o:%.S arm-linux-gcc -o $@ $< -c %.o:%.c arm-linux-gcc -o $@ $< -c clean: rm -f *.o *.bin *.elf *.dis 帮忙看下哪有问题,谢谢了 |
|
相关推荐
4个回答
|
|
|
|
|
|
解决了,谢谢
|
|
|
|
真让人咬牙,你说一下原因也好给以后的人留下经验
|
|
|
|
是啊 到底怎么解决的?我也遇到类似的情况,我下载的是光盘自带源码,也不行。
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2123 浏览 6 评论
1935 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4492 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-19 20:59 , Processed in 0.647747 second(s), Total 82, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号