完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
今天上午的时候偶然成功了,吃过饭后又不行了,我也不知道什么原因,也忘了之前做过什么改动,我用的是mini2440 从nor启动supervivi 将其烧写在nor中运行
系统用的是虚拟机 ubuntu14.04 串口通信工具用的minicom 设置的波特率是115200 没有校验 1个停止位 8位数据 下面贴出我的代码的主要部分, reset: /* svc mode */ mrs r0, cpsr bic r0, r0, #0x1f orr r0, r0, #0xd3 msr cpsr, r0 /* mask interrupt */ ldr r0, =INTMSK ldr r1, =0xffffffff str r1, [r0] ldr r0, =INTSUBMSK ldr r1, =0x7fff str r1, [r0] /* close watchdog */ ldr r0, =WTCON mov r1, #0 str r1, [r0] /* init clock 405MHz 101MHz 50MHz */ ldr r0, =LOCKtiME ldr r1, =0xFFFFFFFF str r1, [r0] mrc p15,0,r0,c1,c0,0 orr r0,r0,#0xc0000000 /* asynchronous bus mode */ mcr p15,0,r0,c1,c0,0 ldr r0, =CLKDIVN mov r1, #0x5 /* 1:4:8 */ str r1, [r0] ldr r0, =MPLLCON ldr r1, =0x7f021 str r1, [r0] /* init memory */ bl memsetup /* init uart */ ldr r0, =UBRDIV0 mov r1, #26 /* (int)((50000000 / (115200 * 16))-1) = 26 */ str r1, [r0] ldr r3, =100 /* 这个延时我是看vivi里有的我也放了个 */ mov r2, #0x0 1: sub r3, r3, #0x1 tst r2, r3 bne 1b ldr r0, =UFCON0 mov r1, #0x0 str r1, [r0] ldr r0, =UMCON0 mov r1, #0x0 str r1, [r0] ldr r0, =ULCON0 mov r1, #0x3 str r1, [r0] ldr r0, =UCON0 ldr r1, =0x304 /* disable receive data change */ str r1, [r0] /* init GPIO */ ldr r0, =GPHCON ldr r1, =UART_GPH str r1, [r0] ldr r0, =GPHUP mov r1, #0x0 str r1, [r0] /* stack */ ldr sp, =0x34000000 bl send_data halt: b halt /**************************************************/ memsetup: mov r1, #0x48000000 adrl r2, mem_cfg_val add r3, r1, #52 1: ldr r4, [r2], #4 str r4, [r1], #4 cmp r1, r3 bne 1b mov pc, lr mem_cfg_val: .long 0x22111110 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00018009 .long 0x00018009 .long 0x008e04eb .long 0xB2 .long 0x30 .long 0x30 以下是初始化后跳转的C代码 主要就是发送字符串 正常结果应该是 hellohelloend #define UTRSTAT0 (*(volatile unsigned long *)0x50000010) #define UTXH0 (*(volatile unsigned long *)0x50000020) void stat_TX0(void); void putc(char str) { UTXH0 = str; } void puts(char *str) { while(*str) { putc(*str++); stat_TX0(); } } void send_data() { int i = 2; while(i) { puts("hello"); i--; } putc('e'); stat_TX0(); putc('n'); stat_TX0(); putc('d'); for(;;); } void stat_TX0(void) { int i; do{ i = UTRSTAT0 >> 2; } while(!i); /* 1 empty 0 busy */ } |
|
相关推荐
1个回答
|
|
串口的输出问题困扰我好久了,不得已在这里提问,先在这里感谢大家了
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2196 浏览 6 评论
1994 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4549 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 11:59 , Processed in 0.506326 second(s), Total 46, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号