入门概念

I/O:是指中央处理器和外设的通信。
I/O端口:是外设的地址,即外设寄存器(数据寄存器、状态寄存器、控制寄存器)在处理器I/O空间的地址。每个外设占用的地址不相同。外设也像内存的存储单元那样通过地址进行区分。
映射:在计算机中是指处理器的地址空间与内存或外设的对应关系。

内存映射I/O空间是指外设的地址和内存的地址在同一个地址空间。ARM PowerPC
软件工程师:I/O端口的读写熟读外设的芯片手册。此乃软件驱动的九阴真经。
硬件工程师:片选,译码和时序。

中央处理器和外设通信方法:

1 IO端口

2 中断

硬中断:外设需要处理器的中断信号线。
软中断(陷阱):通过执行处理器的指令触发。
高优先级的中断会打断低优先级的中断。


硬件连接: 外设需要使用一根中断信号线,并将这一信号线与处理器中断输入管脚连接在一起。
外设主动改变中断线上的电平,产生中断信号进行通知。外设还的在其状态寄存器中设置对应的值,处理器读取状态寄存器的值,判断是那个中断发生,执行相应的中断服务程序。
处理器需要在外设工作之前初始化好处理器的中断控制器和中断服务程序(ISR)。并且中断控制器可以设置中断的触发类型。电平触发,边沿触发。边沿触发上升沿触发



中断服务程序的实现
保存中断时刻处理器的所有寄存器的值,目的是中断服务程序执行完了还能恢复到中断之前的状态并继续运行。处理器的寄存器资源在中断模式和非中断模式之间是共享的。
保存中断之前的寄存器的值需要使用栈,中断状态栈的方式有2种:放到当前正在运行程序的栈上。
方式2:为中断状态提供特定的栈。
1:读取外设中断状态寄存器的值
2:处理器处理完了之后,需要通知外设芯片,即向外设芯片的寄存器中的某一位写入一个值。
通常是清寄存器中的中断。
3:处理器清空外设芯片的中断。

字节序
内存是以字节为单位寻址。
大端模式:高字节放在低地址
小端模式:低字节放在低地址

测试大小端模式方法

         int number = 1;
  if(*(char *)&number)
  printf("Little-endian!\n");
  else
  printf("Big-endian!\n");

大端在数据类型的转换中存在问题,不利于程序的可移植性。
ARM芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。

边界对齐
32位处理器每一次读取操作都是32位的,即4个字节。
所以访问的起始地址必须是4的倍数。
采用边界对齐对变量的访问一次即可读取。
非边界对齐对变量的访问需要多次读取。
对于结构体和枚举,联合的边界对齐方法。

边界对齐的目的是提高处理器的工作效率。

在C编程中,对于结构体的对齐方式,暂时我是百度的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值