![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JZ2440学习笔记
会飞的潴
这个作者很懒,什么都没留下…
展开
-
Linux内核urb接口函数详解
1. urb简介 usb总线是一种轮询式总线,协议规定所有的数据传输都必须由主机发起,usb主机与设备之间是通过管道(pipe)传输的,管道两边分别对应主机中的数据缓冲区和设备侧的端点(endpoint),端点是通信的发送和接收点,要发送数据,只要把数据发到对应的端点就可以,而这个数据发送的动作由usb主机实现,驱动中只需确定接收端点,然后把数据提交给主机控制器,主机会把数据发送给接收端点,原理同i2c,uart类似。每原创 2020-05-28 17:06:11 · 1425 阅读 · 0 评论 -
设置ubuntu让它从串口0输出printk信息
第一步:设置vmware添加serial port, 使用文件作为串口第二步:sudo vim /etc/default/grub进行修改内容:GRUB_CMDLINE_LINUX_DEFAULT=""GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"第三步:sudo update-grubsudo reboot...原创 2020-05-26 13:10:26 · 607 阅读 · 0 评论 -
NFS挂载kernel和文件系统
步骤1:在电脑上安装nfs服务器1.执行命令 sudo apt-get install nfs-kernel-server2.执行命令:mkdir /home/linux/nfs 建立一个nfs服务的专有的文件夹,这里路径依自己喜好而定! 不过要记得这个路径3.建立好文件夹后,接着执行命令:sudo vim /etc/exports 配置nfs4.在文章的最后一行添加:/home/s...原创 2019-11-24 20:01:51 · 711 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解2---链接脚本的引入与简单测试
前面程序运行,发现从Nand Flash启动和从Nor Flash启动表现是不一样的。设置成Nand Flash启动没有问题 显示ABCDE…设置成NOor Flash启动则显示AAA…这是什么原因呢?Nor启动Nor Flash就被认为是0地址,g_Char被放在0x700后面。CPU上电后从0地址开始执行,它能读取Nor Flash上的代码,打印出A,当进行g_Char++的时候,...原创 2019-07-17 21:20:11 · 243 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解3---链接脚本的解析
链接脚本的语法SECTIONS {...secname start BLOCK(align) (NOLOAD) : AT ( ldadr ) { contents } >region :phdr =fill...}解释: secname :段名 start :起始地址:运行时的地址(runtime addr);重定位地址(relocate addr) AT (...原创 2019-07-17 22:54:37 · 246 阅读 · 2 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解4---拷贝代码和链接脚本的改进
本节进行拷贝代码的改进和链接脚本的改进。前面重定位时,需要ldrb命令从的Nor Flash读取1字节数据,再用strb命令将1字节数据写到SDRAM里面cpy: ldrb r4, [r1] /*首先从flash读出一个字节*/ strb r4, [r2] /*让后把数据写到SDRAM*/ add r1, r1, #1 add r2, r2, #1 c...原创 2019-07-21 20:48:28 · 184 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解5---代码重定位与位置无关码
一个程序,由代码段、只读数据段、数据段、bss段等组成。程序一开始可以烧在Nor Flash上面,运行时代码段仍可以在Nor Flash运行,但对于数据段,就必须把数据段移到SDRAM中,因为只要在SDRAM里面,数据段的变量才能被写操作,把程序从一个位置移动到另一个位置,把这个过程就称为重定位。先梳理下把整个程序复制到SDRAM需要哪些技术细节:把程序从Flash复制到运行地址,链接脚本...原创 2019-07-21 22:04:55 · 224 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解6---重定位清除BSS段的C函数实现
在前面,我们使用汇编程序来实现了重定位和清bss段,本节我们将使用C语言,实现重定位和清除bss段。1.打开start.S把原来的汇编代码删除改为调用C函数 /* 重定位text, rodata, data段整个程序 */ mov r1, #0 ldr r2, =_start /* 第1条指令运行时的地址 */ ldr r3, =__bss_sta...原创 2019-07-21 23:46:17 · 142 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解1---概念引入与处理流程
取个场景解释中断。假设有个大房间里面有小房间,婴儿正在睡觉,他的妈妈在外面看书。问:这个母亲怎么才能知道这个小孩醒?过一会打开一次房门,看婴儿是否睡醒,让后接着看书 一直等到婴儿发出声音以后再过去查看,期间都在读书第一种 叫做查询方式:*优点:简单*缺点: 累写程序如何:while(1){ 1 read book(读书) 2 open door(...原创 2019-07-22 22:02:43 · 201 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解2---CPU模式(Mode)状态(State)与寄存器
这节课我们来讲CPU的工作模式(Mode) 状态(State)寄存器7种Mode: usr(用户模式) sys(系统模式) undefined(und)(未定义模式) Supervisor(svc)(管理者模式) Abort(abt)(中止模式) IRQ(irq)(中断模式) FIQ(fiq)(快速中断模式)2种State: ARM state Thumb state寄...原创 2019-07-22 22:57:30 · 201 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解8---定时器中断程序示例
这节课我们来写一个定时器的中断服务程序使用定时器来实现点灯计数查考资料就是第10章PWM TIMER我们先把这个结构图展示出来这个图的结构很好这里面肯定有一个clk(时钟),1 、每来一个clk(时钟)这个TCNTn减去12、 当TCNTn == TCMPn时,可以产生中断,也可以让对应的SPWM引脚反转,(比如说原来是高电平,发生之后电平转换成低电平)3、 TCNTn继续减1,当...原创 2019-08-04 22:24:03 · 327 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解3---Thumb指令集程序示例(不重要)
在上节视频里说ARMCPU有两种状态ARM State 每条指令会占据4byteThumb State 每条指令占据2byte我们说过Thumb指令集并不重要,本节演示把一个程序使用Thumb指令集来编译它使用上一章节的重定位代码,打开Makefile和Start.SMakefile文件all: arm-linux-gcc -c -o led.o led.c arm-...原创 2019-07-22 23:23:58 · 182 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解5---_swi异常模示程序示例
这节我们再来演示swi的处理流程swi软件中断:software interrupt在前面的视频中我们讲过ARMCPU有7中模式(下图为7种模式),除了用户模式以外,其他6种都是特权模式,这些特权模式可以直接修改CPSR进入其他模式usr用户模式不能修改CPSR进入其他模式Linux应用程序一般运行于用户模式APP运行于usermode,(受限模式,不可访问硬件)APP想访问硬件...原创 2019-08-01 13:18:08 · 216 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解6---按键中断程序示例概述与初始
在前面的视频里我们举了一个例子,母亲看书被声音打断,远处的声音来源有多种多样,声音传入耳朵,再由耳朵传入大脑,整个过程涉及声音来源耳朵大脑,为了确保这个母亲看书的过程能够被声音打断,我们必须保证声音来源可以发出声音,耳朵没有聋,脑袋没有傻。中断处理流程1、中断初始化:①我们需要设置中断源,让它能够发出中断②设置中断控制器,让它能发出中断给CPU③设置CPU,CPSR有I位,是总开关2、...原创 2019-08-01 23:02:05 · 165 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解7---按键中断程序示例完善
首先main.c中我们初始化中断控制器初始化中断源假设按键按键就会产生中断,CPU就会跳到start.S 执行.text.global _start_start: b reset /*vector 0 一上电复位,是从0地址开始执行,跳到reset*/ ldr pc, und_addr /*vector 4 如果发生未定义指令异常,硬件就会在自动跳转0x04地址未定义指令异常处...原创 2019-08-02 12:54:24 · 153 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440代码重定位详解1---段的概念重定位的引入
S3C2440的CPU可以直接给SDRAM发送命令、给Nor Flash发送命令、给4K的片上SDRAM发送命令,但是不能直接给Nand Flash发送命令NAND启动过程假如把程序烧写到Nand Flash上,即向Nand Flsh烧入* bin* 文件,CPU是无法从Nand Flsh中取代码执行的。为什还可以使用NAND启动?上电后,Nand启动硬件会自动把Nand Flsh前4K...原创 2019-07-16 23:54:23 · 281 阅读 · 0 评论 -
jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解4---_und异常模示程序示例
1、异常向量表 /******下面这些就是异常向量表*****/ .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, ...原创 2019-07-29 00:07:08 · 220 阅读 · 0 评论 -
jz2440裸机开发与分析: 点亮LED灯之汇编语言
① .text.text部分是处理器开始执行代码的地方,指定了后续编译出来的内容放在代码段【可执行】arm-linux-gcc编译器的关键词② .global.global关键字用来让一个符号对链接器可见,可以供其他链接对象模块使用;告诉编译器后续跟的是一个全局可见的名字【变量/函数名】.global _start让_start符号成为可见的标识符,这样链接器就知道跳转到程序中的什么地方...原创 2019-07-07 22:06:12 · 462 阅读 · 0 评论 -
jz2440裸机开发与分析: 点亮LED灯之C语言1
c语言代码```#define GPFCON 0X56000050#define GPFDAT 0X56000054int main(){unsigned int *pGPFCON= (unsigned int *)GPFCON;/开辟内存存放pGPFCON变量/unsigned int *pGPFDAT= (unsigned int *)GPFDAT;/开辟内存存放pGPFDAT变量...原创 2019-07-07 23:48:48 · 217 阅读 · 0 评论 -
jz2440裸机开发与分析: 点亮LED灯之C语言2
jz2440裸机开发与分析: 点亮LED灯之C语言1编译 链接 取反汇编arm-none-linux-gnueabi-gcc -g -nostdlib -c -o led.o led.carm-none-linux-gnueabi-gcc -g -nostdlib -c -o start.o start.sarm-none-linux-gnueabi-ld -Ttext 0 -g star...原创 2019-07-09 20:23:54 · 164 阅读 · 0 评论 -
jz2440裸机开发与分析: 点亮LED灯之C语言3
对于之前提出了栈这一概念下面我们要提出问题:1.为何要使用栈答:c函数要用2.如何使用栈答:a.保存局部变量 b.保存lr等寄存器3.调用者如何传参数给被调用者start.s.text.global _start_start: /* 设置内存: sp 栈 */ ldr sp, =4096 /* nand启动 */// ldr sp, =0x40000000+4096 ...原创 2019-07-09 20:37:51 · 136 阅读 · 0 评论 -
jz2440裸机开发与分析:串口编程2
、原创 2019-07-14 17:37:11 · 136 阅读 · 0 评论 -
jz2440裸机开发与分析:串口编程3之printf解析
测试代码: #include <stdio.h> void printf_test(void){ printf("hello word\n"); printf("This is www.100ask.org my_printf test\n") ; printf("test char =%c,%c\n", 'A','a') ; printf...原创 2019-07-14 18:34:15 · 158 阅读 · 0 评论 -
jz2440裸机开发与分析:串口编程4之struct内存占用介绍
由于在x86(32位机器)平台下,GCC编译器默认按4字节对齐, 如:结构体4字节对齐,即结构体成员变量所在的内存地址是4的整数倍。可以通过使用gcc中的__attribute__选项来设置指定的对齐大小。1):attribute ((packed)),让所作用的结构体取消在编译过程中的优化对齐,按照实际占用字节数进行对齐。2):__attribute((aligned (n))),...原创 2019-07-14 18:43:22 · 96 阅读 · 0 评论 -
jz2440裸机开发与分析:串口编程5之串口实现printf
部分重要代码:main.c#include "s3c2440_soc.h"#include "uart.h"#include "my_printf.h"int main(void){ unsigned char c; uart0_init(); puts("Hello, world!\n\r"); my_printf_test(); while(1) { c...原创 2019-07-14 18:55:19 · 289 阅读 · 2 评论 -
jz2440裸机开发与分析:内存控制器1之内存接口概念
JZ2440内部大致结构:CPU把值写到外部寄存器,使外部寄存器发出不同的波形,控制相应设备,由此我们将提出,芯片内部如何选择不同寄存器的,所以芯片内部引入了内存控制器。CPU发送地址信息...原创 2019-07-14 23:01:40 · 187 阅读 · 0 评论 -
jz2440裸机开发与分析:内存控制器2之不同位宽设备的连接
由上图可以推断出假设CPU执行MOV R0,#3LDRB R1,[R0]读地址3的一个字节,A0=1;A1=1;A2=0假设CPU执行MOV R0,#4LDR R1,[R0]读地址4的4个字节,A0=0;A1=0;A2=1如何确定芯片访问地址1、根据片选信号确定基址(base)2、根据芯片所接的地址线确定范围...原创 2019-07-15 00:39:49 · 105 阅读 · 0 评论 -
jz2440裸机开发与分析:ARM芯片时钟体系1
OM开关原创 2019-07-11 22:59:40 · 110 阅读 · 0 评论 -
jz2440裸机开发与分析:ARM芯片时钟体系2
目标:有上节可知,要想得到FCLK,HCLK,PCLK的时钟需要配置两个寄存器,分别为MPLLCON和CLKDIVN第一步:先对LOCKTIME初始化/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ ldr r0,=0x4C000000 ldr r1,=0xFFFFFFFF str r1,[r0]第二步:对MPLL进行配置,配置为400MHz由...原创 2019-07-12 12:14:10 · 151 阅读 · 0 评论 -
jz2440裸机开发与分析:内存控制器3之时序图分析
根据前两节课,我们明白不同内存类设备与2440的连接2440与NOR flash的连接图由上图NOR flash 读的时序图可知,Taa即当输出地址的70ns之后数据有效;Tce即当CE处于低电平大于70ns之后数据有效;Toe即当OE处于低电平大于30ns之后数据有效;Trc即为读周期的时间为70ns;Tdf即为OE和CE处于高电平大于30ns之后,数据输出稳定;综上,我们要让2440同...原创 2019-07-16 21:25:50 · 195 阅读 · 0 评论 -
jz2440裸机开发与分析:内存控制器4之SDRAM设置
LDR R0,=0X30000000➡CPU发给内存控制器:①发出nGCS6;②根据(SDRAM)类型拆分地址:a,BANK地址,b,行地址, c,列地址 ;③读数据LDR R1,[R0]问题:如何拆分?行地址几条?列地址几条?2440内存控制器设置1、BWSCON寄存器配置=0x220000002、BANKCON6寄存器配置3、REFRESH刷新寄存器配置4、BANHSI...原创 2019-07-16 22:33:36 · 155 阅读 · 0 评论 -
jz2440裸机开发与分析:串口基础知识1
UART简介串口的作用1、打印调试信息2、连接一些串口设备,比如GPS,GSM,ESP8266串口需要配置的内容1、波特率 2、数据位 3、停止位 4、校验位 5、流控制串口发送数据的过程1、双方先约定好每一位占据的时间(波特率),假设为1s2、首先arm将TXD引脚拉低,维持1bit(1s)时间3、PC机载低电平开始处计时4、arm根据数据驱动引脚TXD电平,每一位...原创 2019-07-12 22:27:02 · 180 阅读 · 0 评论