- 博客(20)
- 收藏
- 关注
原创 tiny6410DMA程序设计
/*S3C6410中DMA操作步骤:1、决定使用安全DMAC(SDMAC)还是通用DMAC(DMAC);2、开始相应DMAC的系统时钟,并关闭另外一组的时钟(系统默认开启SDMA时钟);3、开启DMAC控制,设置DMAC_Configuration寄存器;4、清除传输结束中断寄存器和错误中断寄存器;5、选择合适的优先级通道;6、设置通道的源数据地址和目的数据地址(设置D
2017-04-27 21:20:12 343
原创 tiny6410串口驱动程序设计
建立文件uart.c。#define GPACON (*((volatile unsigned short *)0x7F008000))#define ULCON0 (*((volatile unsigned long *)0x7F005000))#define UCON0 (*((volatile unsigned long *)0x7F005004))
2017-04-27 16:18:58 414
原创 tiny6410 nandflash驱动设计
按页的方式读,写驱动1、读操作创建文件nand.c#define NFCONT (volatile unsigned long*)0x70200004#define NFSTAT (volatile unsigned long*)0x70200028#define NFCMMD (volatile unsigned long*)0x70200008#define NFADD
2017-04-25 10:12:20 332
原创 tiny6410 通过按键玩中断
按键中断就是设置tiny6410上的GPIO,通过手册可知,需要设置寄存器GPNCON跟GPLCON控制寄存器,首先start.S修改中断初始化init_stack:msr cpsr_c, #0xd2ldr sp, =0x53000000 //初始化r13_irqmsr cpsr_c, #0xd3ldr sp, =0x54000000 //初始化r13_svcm
2017-04-24 19:56:54 426
原创 tiny6410的MMU的配置于使用
由手册《Arm1176jzfs》的第六节可知,tiny6410MMU的配置与使用需要分三步:1、建立一级页表/* * 用于段描述符的一些宏定义 */ #define MMU_FULL_ACCESS (3 #define MMU_DOMAIN (0 #define MMU_SPECIAL (1 #define MMU_CAC
2017-04-24 09:02:14 448
原创 tiny6410的C语言环境初始化
1、栈的初始化(弄清楚栈的概念和作用)init_stack:ldr sp, =0x54000000mov pc, lr2、bss段初始化初始化的全局变量->数据段局部变量->栈malloc->堆未初始化的全局变量->bss段bss段初始化就是bss全段清零。clean_bss:ldr r0, =bss_startldr r1, =bss_endc
2017-04-21 22:19:10 483
原创 tin6410代码搬移
copy_to_ram:ldr r0, =0x0c000000ldr r1, =0x50008000add r3, r0, #1024*4copy_loop:ldr r2, [r0], #4str r2, [r1], #4cmp r0, r3bne copy_loopmov pc, lr把垫脚石的内容搬移到内存当中。
2017-04-21 22:10:40 239
原创 tiny6410内存初始化
tiny6410存储控制器由手册《S3C6410X》的第五章节介绍。根据5.4.1小节的流程来完成初始化 ,初始化分为六步来完成:1、Program memc_cmd to ‘3’b100’, which makes DRAM Controller enter ‘Config’ state. 代码如下:ldr r0, =0x7e001004 mov r1, 0x4
2017-04-21 18:00:09 437
原创 tiny6410时钟初始化
时钟初始化首先要了解芯片的时钟频率是多少HZ?有多少PLL?PLL都产生了哪些时钟?这些时钟都是干什么的?参考手册《S3C6410X》。时钟初始化分为五步:1、设置locktime。2、设置分频系数。3、设置CPU到异步工作模式。4、设置APLL和MPLL。5、选择晶振源第一步设置locktime一般选择默认值,第二步设置分频系数比例参考uboot,设置分频系数主要
2017-04-20 19:38:48 501
原创 tiny6410LED驱动设计
在tiny6410的led首先要把外设基地址初始化。由手册《S3C6410X》手册可知tiny6410的基地址是0x70000000,然后根据手册《Arm1176jzfs》的cp15的c15寄存器设置初始化基地址。外设基地址初始化要加在svc初始化的下面。set_peri_port:ldr r0, =0x70000000orr r0,r0,#0x13mcr p15,0,r0
2017-04-20 16:41:14 292
原创 tiny6410关闭mmu和cache
关闭mmu和cache要分成两步,首先要使i,dcache无效,然后关闭i,dcache和mmu。mmu跟cache的控制寄存器在手册《Arm1176jzfs》中,主要是设置cp15寄存器。c1是控制寄存器,主要是设置c1.设置的汇编代码格式已经在手册中给出,可以自己查阅手册。在reset处设置跳转指令bl disable_mmu代码如下disable_mmu:mcr
2017-04-14 15:52:22 371
原创 tiny6410关闭中断
tiny6410屏蔽中断首先要设置cpsr的I位跟F位为1,这个在设置svc模式的时候已经完成了。第二步就要设置屏蔽中断寄存器,在手册《S3C6410X》中的12节有中断寄存器的内容。INTERRUPT ENABLE REGISTER,VICINTENABLE寄存器只能使能中断而不能屏蔽中断,要屏蔽中断就要设置INTERRUPT ENABLE CLEAR ,VICITENCLEAR寄存
2017-04-14 15:09:25 291
原创 tiny6410关闭看门狗
关闭看门狗,主要是设置看门狗控制寄存器,在手册《S3C6410X》的34节中提到了看门狗,由手册可知看门狗控制寄存器WATCHDOG TIMER CONTROL REGISTER,简称WOCON。有手册可知该寄存器的地址为0x7e004000.关闭看门狗是第0位,关闭重启为第1位,关闭中断信号位第2位。我们可以把该寄存器的16位全部设置为0.在reset的处加上跳转编号bl d
2017-04-14 14:41:57 433
原创 设置tiny6410的svc模式
要设置用户工作在svc模式,是通过程序状态寄存器来设置的,程序状态寄存器有cpsr跟spsr,设置工作模式主要是设置cpsr,由手册可知,要设置svc模式,只要设置cpsr的M位为10011即可。设置思路可以分为两步,第一步把这五位全部清零,第二步,根据位置置一。然后在reset处加上 bl set_svcset_svc:mrs r0, cpsrbic r0, r0,#0x
2017-04-14 14:05:35 279
原创 链接器脚本的设计
SECTION {. = 0x00; //设置起始地址;. = ALIGN(4); //4字节对其;.text :{start.o(.text) //指明代码段首文件;*(.text)}. = ALIGN(4);.data :{*(.da
2017-04-06 22:37:01 244
原创 交叉工具链小结
vim hello.c //首先建立一个.c的文件gcc -static hello.c -o hello //静态编译//这个编译好的程序只能在linux上运行 ,下载到开发板上就不能运行了。arm-linux-gcc -o 是指定编译完成的文件名 -c 只编译不连接 //编译arm-linux-ld -
2017-04-06 11:12:30 375
原创 交叉编译点亮小灯
makefile文件如下all: led.o arm-linux-ld -Tled.lds -o led.elf led.oarm-linux-objcopy -O binary led.elf led.binled.o : led.Sarm-linux-gcc -g -o led.o -c led.S.PHONY: cleanclean:r
2017-04-06 10:26:09 437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人