打印

关于STM32F0寻址空间问题

[复制链接]
2512|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znsword|  楼主 | 2012-8-16 21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有没有大侠能够解释一下为什么STM32F0给每个外设分配了那么大的空间。

例如:SPI2编址范围:0x4000 3800 - 0x4000 3BFF
可是根据定义

typedef struct
{
  __IO uint16_t CR1;      /*!< SPI Control register 1 (not used in I2S mode),  Address offset: 0x00 */
  uint16_t  RESERVED0;    /*!< Reserved, 0x02                                                            */
  __IO uint16_t CR2;      /*!< SPI Control register 2,                              Address offset: 0x04 */
  uint16_t  RESERVED1;    /*!< Reserved, 0x06                                                            */
  __IO uint16_t SR;       /*!< SPI Status register,                                 Address offset: 0x08 */
  uint16_t  RESERVED2;    /*!< Reserved, 0x0A                                                            */
  __IO uint16_t DR;       /*!< SPI data register,                                   Address offset: 0x0C */
  uint16_t  RESERVED3;    /*!< Reserved, 0x0E                                                            */
  __IO uint16_t CRCPR;    /*!< SPI CRC polynomial register (not used in I2S mode),  Address offset: 0x10 */
  uint16_t  RESERVED4;    /*!< Reserved, 0x12                                                            */
  __IO uint16_t RXCRCR;   /*!< SPI Rx CRC register (not used in I2S mode),  Address offset: 0x14 */
  uint16_t  RESERVED5;    /*!< Reserved, 0x16                                                            */
  __IO uint16_t TXCRCR;   /*!< SPI Tx CRC register (not used in I2S mode),  Address offset: 0x18 */
  uint16_t  RESERVED6;    /*!< Reserved, 0x1A                                                            */
  __IO uint16_t I2SCFGR;  /*!< SPI_I2S configuration register,            Address offset: 0x1C */
  uint16_t  RESERVED7;    /*!< Reserved, 0x1E                                                            */
  __IO uint16_t I2SPR;    /*!< SPI_I2S prescaler register,                Address offset: 0x20 */
  uint16_t  RESERVED8;    /*!< Reserved, 0x22                                                            */   
} SPI_TypeDef;

SPI2寄存器的实际寻址空间为:0x4000 3800 - 0x4000 3822(其中还有好多保留的)。那么剩下的空间都用来干嘛?
沙发
aozima| | 2012-8-16 21:23 | 只看该作者
保留的外设空间并不占用实际空间。

使用特权

评论回复
板凳
znsword|  楼主 | 2012-8-16 22:14 | 只看该作者
为什么不把寻址空间弄小一点?实际要不了1K,为什么要设置为1K?

使用特权

评论回复
地板
IJK| | 2012-8-17 11:53 | 只看该作者
本帖最后由 IJK 于 2012-8-17 14:43 编辑

赞同2L。
或许LZ没用过32位单片机,其实我看到的32位单片机都这样做,每个外设的基地址 间隔很大的地址空间。

使用特权

评论回复
5
aozima| | 2012-8-17 13:06 | 只看该作者
一部分是用来做 Reserved,同一个外设模块,在不同的芯片上面有不同的裁剪。
一些功能被阉割掉以后,那块就变成Reserved了,而其它没变的功能的寄存器地址还是跟原来一样。

还有一个就是32位多使用32位的访问方式,所以有一些对齐填充。

然后就是为了访问方便,本来32个标致位可以放在一个寄存器里面,
但这样使用时要自己进行大量的与或操作,并要自己考虑原子操作的问题。

所以干脆改为使用32个32位寄存器,但每个寄存器只有一位有效。

看起来空间由原来的4字节变成了 4X32=128字节,实际上在芯片物理结构上没什么变化。
做过FPGA的应该很熟悉。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

43

帖子

2

粉丝