未末 发布的文章

项目地址https://github.com/ilanschnell/bitarray
其中有一个大小端的转换
简单的讲就是1字节8比特,大小端相互转换时就是将每个字节的8位比特,也就是8位的二进制,“翻转”操作得到转换结果。

from bitarray import bitarray
>>> bit_array = bitarray(endian="big")
>>> bit_array
bitarray()
>>> bit_array.frombytes(b"fdsp")
>>> bit_array
bitarray('01100110011001000111001101110000')
>>> bitarray(bit_array, endian="little")
bitarray('01100110001001101100111000001110')

在md5计算中,在填1补0这一步之后,所有操作都是基于小端的。

通用I/O数字输入接口设计

I/O输入接口硬件设计要点

根据系统外围电路输入的电信号形式,可以把输入信号分为以下几种形式。

  • 模拟信号和数字信号
    传感器将某个外部参数的变化转换为电信号。如果传感器输出电信号的幅度变化特征代表了外部参数的变化,例如电压的升高/下降表示温度高/低变化,那么这个传感器就是模拟传感器,它产生的是模拟信号。由于MCU是数字化的,因此模拟信号要转换成数字信号才能由MCU处理。这个转换电路称为模/数转换。A/D转换是嵌入式系统重要的外围接口电路之一,用途广泛。在系统硬件设计中,可以选取专用的A/D转换芯片作为模拟传感器与单片机之间的接口,也可以选取片内A/D转换功能的单片机,以简化硬件电路的设计。大多数型号的AVR单片机在片内都集成有A/D接口。
  • 电压信号和电流信号
  • 单次信号和连续信号

I/O输入信号软件设计要点

  • 正确使用AVR的I/O口要注意:先正确设置DDRx方向寄存器,再进行I/O口的读写操作。
  • AVR的I/O口复位后的初始状态全部为输入工作方式,内部上拉电阻无效。因此,外部引脚呈现三态高阻输入状态。
  • 用户程序需要首先对要使用的I/O口进行初始化设置,根据实际需要设定使用I/O口的工作方式(输出还是输入),当设定为输入方式时,还要考虑是否使用内部上拉电阻。
  • 在硬件电路设计时,如果能利用AVR内部I/O口的上拉电阻,则可以节省对外部的上拉电阻。
  • I/O口用于输出时,应设置DDRx = 1或DDRx,n = 1,输出值写入PORTx或PORTx,n中。
  • I/O口用于输入时,应设置DDRx = 0或DDRx,n = 0,读取外部引脚电平时,应读取PINx,n的值,而不是PORTx,n的值,此时PORTx,n = 1表示该I/O内部的上拉电阻有效,而PORTx,n=0表示不使用内部上拉电阻,外部引脚呈现三态高阻输入状态。
  • 一旦将I/O口的工作方式由输出设置成输入方式后,必须等待1个时钟周期后才能正确读到外部引脚PINx,n的值。