一。了解开发板资源
第一步1.找到CPU,什么架构的CPU,为了找到系统上电后,第一条执行的代码该放到哪里。0x0
第二步2.0x0接什么芯片?可读可保存的。有flash(norflash)和rom
3.异常和中断?
异常:CPU自己主动终止。有个异常向量表。其中复位异常比较重要。
中断:外部打断CPU
4.SOC片上系统等于CPU加一堆控制器
看datasheet block,在overview章节
电路图:地址总线,数据总线。Memory Port0,1,2
片外其他芯片通过一根总线挂接到主芯片上面
5.SOC的4G资源是怎么分的?片内资源和片外资源分多少?由芯片厂商定的。
这些地址被芯片公司重新定义,到芯片公司的datasheet中去找memory map章节那个框图
片内资源:SFR Area(特殊状态寄存器)
片外资源:除了SFR以外几乎都是由片外资源管的
找异常向量表看reset地址0x0对应什么东西
例子:
S5PV210
0x0~~~~对应i Rom(片内资源)~固化到i Rom的code~跳转到新的地址
S3C2410
0x0~~~~对应SROM(bank0)(片外资源)~bank0挂接什么芯片
6.boot程序
设置时钟clock,提供系统的工作频率。设置好clock才能进行接口开发
7.接口开发(boot加interface)
圆圈低电平有效 片选信号CS
8.片外资源的地址确定
SDRAM空间分块,每一个分块起始地址—结束地址。程序访问的地址,落在哪一个分块区间,CPU就自动的对该分块的片选信号置为有效
找到对应芯片,找该芯片的类似于CS/enable这样的引脚,看该引脚接到CPU的哪个片选信号上
例子:网卡
先找网卡芯片,找到CS,挂的哪个引脚xm0csn1,对应bank1,看表找到地址范围
SROM空间分块
片内资源直接访问就行。没有挂在地址总线的资源都是SFR片内资源。
对于外设怎么确定地址?
要看有没有地址总线,有地址总线就按照第一种方法找片选信号
没有地址总线就是片内资源的方法。
相关文章
- DevOps运动的缘起 将DevOps想象为一种编程语言里面的一个接口,而SRE类实现了这个接口
- Go语言中 接口的理解和实现细节 以及最佳实践 (Golang经典编程案例)
- LangChain---大型语言模型(LLM)的标准接口和编程框架
- 探索Go语言接口:灵活多态的编程之道-6. 接口组合
- 嵌入式学习37-TCP并发模型-有限 2.IO模型: 1.阻塞IO: 没有数据到来时,可以让任务挂起 节省CPU资源开销,提高系统效率 2.非阻塞IO: 程序未接收到数据时一直执行 效率很低 3.异步IO 只能绑定一个文件描述符用来 读取数据 4.多路复用IO select 1.select监听的集合中的文件描述符有 上限限制 2.select有 内核层 向 用户层数据空间 拷贝 的过程,占用系统资源开销 3.select必须 轮询检测 产生 事件 的文件描述符 4.select 只能工作 在 水平触发 模式(低速模式) 无法工作 在 边沿触发 模式(高速模式) poll (监听的集合中的文件描述符有 没有上限限制) 1.poll有 内核层 向 用户层 数据空间 拷贝 的过程,占用系统资源开销 2.poll必须 轮询检测 产生 事件 的文件描述符 3.poll 只能工作在水平触发模式(低速模式) 与select相同 无法工作在边沿触发(高速模式) 3.函数接口: 1.select int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 功能: select 监听 文件描述符集合 中 是否 有文件描述编程 ready状态 select 监听 文件描述符集合 中 ,若有状态 , 将没有ready状态的T除 若无状态,将阻塞继续等待 参数: nfds: 最大文件描述符的值 +1 readfds: 读 文件描述符集合 writefds: 写 文件描述符集合 exceptfds: 其余 文件描述符集合 timeout: 等待的时长 NULL 一直等待(超时处理) 返回值: 成功 返回 文件描述符集合中 的 文件描述符个数 失败 返回 -1 void FD_CLR (int fd, fd_set *set); 功能: 将文件描述符 fd 从集合中清除
- 嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第二天-arm ads下的start.S分析(物联技术666)
- Linux Kernel C语言编程范式 内部DSL是嵌入到开发语言内部,与开发语言混合使用的DSL,它可以是一个接口,如printf,也可以是一个宏,如下示例。UNUSUAL_DEV呈现了2种信息,一种是设备id_table信息,用于驱动匹配,一种是unusual_dev_list,用于标示非标准设备。具体设计和实现细节可以参考《Linux设备驱动框架设计》一文中的“USB块设备驱动框架设计”小节,不再赘述。
- C#扫盲篇(二)依赖倒置•控制反转•依赖注入•面向接口编程--满腹经纶的说
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
- 实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。