裸板
longshan_2009
这个作者很懒,什么都没留下…
展开
-
6410之点其他的灯,让其闪烁
代码如下: #define CONFIG_PERIPORT_BASE 0x70000000 #define CONFIG_PERIPORT_SIZE 0x13 #define WTCON 0x7E004000 #define GPMCON 0x7F008820 #define GPMDAT 0x7F008824 .global _start _start: /原创 2013-07-30 16:27:12 · 662 阅读 · 0 评论 -
6410之向量中断
向量中断: 在分辨是哪个中断的时候非常有用,6410中64组中断,就可以使用向量中断来进行判断。 以前31组中断为例,假如Vectored interrupt 1发生了中断,它就会将Vectored interrup 1的地址告诉VectorAddr寄存器。如下图所示: 6410中有两个中断控制器,它们分别为VIC0,VIC1,假如VIC0的第0组中断源发生了中断,硬件上,6原创 2013-08-13 10:37:40 · 1021 阅读 · 0 评论 -
6410之中断处理
中断: 在6410 arm体系中,有很多模块可以产生中断,比如GPIO,UART,TS等都可以产生。在这些模块和CPU之间还有一个中断控制器。这个中断控制器就是用于协调这些模块和CPU之间的交互的。比如:GPIO和UART同时发出中断请求,那么CPU来处理那个中断呢?这就需要用到中断控制器了。如下图所示: 从上图可以看到ARM1176中断控制器支持64组中断源。具体哪64组可以参考64原创 2013-08-08 15:56:21 · 772 阅读 · 0 评论 -
6410之异常处理
ARM的工作模式分为下面几种: 共有七种工作模式,他们分别为: 1.System & User模式 2.Fiq快速中断模式 3.SVC管理模式 4.abt终止模式 5.irq普通中断模式 6.und未定义指令模式 其中: 1.黑三角表示该模式下所特有的寄存器 2.R13:链接寄存器LR 3.R14:栈指针寄存器SP 4.R15:程序指令计数器PC ARM模原创 2013-08-08 15:06:14 · 881 阅读 · 0 评论 -
6410之NAND(1)
6410所使用的NANDFLASH的原理图如下所示: 发现此NANDFLASH的传输数据信号只有9根线(DATA0 - DATA7),那么如何进行寻址,读/写数据呢? 1.命令(cmd),地址(addr),数据(data)复用,cmd,data,addr的识别通过CLE,ALE来决定,读还是写又WE,RE决定,是否处于busy状态由RnB决定 2.地址:多次发出(这个nandflas原创 2013-08-07 10:40:39 · 773 阅读 · 0 评论 -
6410之点灯
程序如下: #define CONFIG_PERIPORT_BASE 0x70000000 #define CONFIG_PERIPORT_SIZE 0x13 #define WTCON 0x7E004000 #define GPMCON 0x7F008820 #define GPMDAT 0x7F008824 .global _start _start: /原创 2013-07-29 16:06:44 · 559 阅读 · 0 评论 -
6410之重定位,清bss
代码如下: relocate_code: adr r0,_start //获取指令_start的当前地址 ldr r1,=_start //获取指令_start的链接地址 ldr r2,=bss_start cmp r0,r1 beq clean_bss copy_loop: ldr r3,[r0],#4 str r3,[r1],#4 cmp r1,r2 bne原创 2013-08-01 14:33:47 · 697 阅读 · 0 评论 -
6410之链接地址
一个程序包括: 1.代码段 : 指令 2.数据段 : 有初始值(并且不为0)的全局静态变量 3.bss段 : 初始值为0 / 无初始值的全局静态变量 链接选项-Ttext 0 : 这个链接选项表示程序的代码段从0开始运行,数据段,bss段依次向后排列。 除了上面指定各个段存放位置的方法,还可以使用另外一种方法:使用链接脚本 -T leds.lds,这个链接脚本决定了各个段如何原创 2013-08-01 11:40:46 · 640 阅读 · 0 评论 -
6410之uart的配置
主程序start.S #define CONFIG_PERIPORT_BASE 0x70000000 #define CONFIG_PERIPORT_SIZE 0x13 #define WTCON 0x7E004000 .global _start _start: /*告诉CPU 外设的地址*/ ldr r0, =CONFIG_PERIPOR原创 2013-07-31 17:52:48 · 618 阅读 · 0 评论 -
6410之汇编和c之间参数的传递
一、汇编向c中传递参数并调用 1.传递低于4个参数: 如果汇编向c传递的参数个数小于或等于4个的话,这几个参数可以存放在r0-r3寄存器中,如果多余4的话就需要将多余的参数存放到栈中了。 汇编代码: #define CONFIG_PERIPORT_BASE 0x70000000 #define CONFIG_PERIPORT_SIZE 0x13 #define WTCON原创 2013-07-31 10:38:40 · 778 阅读 · 0 评论 -
6410之点灯程序的反汇编代码分析
对上面一章的led.elf,使用下面命令生成反汇编代码: arm-linux-objdump -D led.elf > led.dis led.dis内容如下: led.elf: file format elf32-littlearm Disassembly of section .text: 00000000 ://汇编代码的标签,地址为0 0: e3a00207原创 2013-07-30 14:48:34 · 1229 阅读 · 0 评论 -
6410之写跳转到c函数中运行
汇编程序: #define CONFIG_PERIPORT_BASE 0x70000000 #define CONFIG_PERIPORT_SIZE 0x13 #define WTCON 0x7E004000 .global _start _start: /*告诉CPU 外设的地址*/ ldr r0, =CONFIG_PERIPORT_BASE orr r0, r0, #C原创 2013-07-30 17:15:29 · 583 阅读 · 0 评论 -
6410之UART使用中断方式
UART使用中断方式的流程: 1.组件有:DDR上面的一个buffer,UART上的FIFO,CPU 2.拿发送来说,UART上面FIFO可以设置一个阈值,当UART上的FIFO小于这个阈值的时候,UART就会发送一个中断给CPU,CPU就会将DDR上buffer中的数据自动发送给UART上的FIFO直到满为止,当FIFO又小于这个阈值的时候,又会进行这个操作。 如下图所示: 在上原创 2013-08-13 11:27:43 · 1405 阅读 · 0 评论