关于DMA内存基地址

2019-08-11 17:59发布

DMA_DeInit(DMA2_Channel5);   //将DMA的通道1寄存器重设为缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)FlappyBird_Frame;  //DMA外设ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)0X6C000800;  //DMA内存基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  


各位大佬,(战舰v3的板子,片选接的是A10)我想问一下我把液晶屏当作FSMC的SRAM3区l来用,DMA用来把液晶的数据丢给一个数组,这个DMA的内存基地址,不应该是(u32)0X6C000400

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
a0101
1楼-- · 2019-08-11 23:16
 精彩回答 2  元偷偷看……
wenzh3333
2楼-- · 2019-08-12 01:32
把数据丢给数组  那就对数组取地址喽   &
a0101
3楼-- · 2019-08-12 03:22
wenzh3333 发表于 2017-10-26 15:48
把数据丢给数组  那就对数组取地址喽   &

老哥数据名就是外设的地址,我问的是内存基地址,为啥不是0X6C000400
wenzh3333
4楼-- · 2019-08-12 06:34
a:战舰板中,RS接的A10  则A10为1是写数据,A10为0是写命令
  b:而因为FSMC用的是第一块  片选CS又是接NE4就是第四区所以基地址为0x6c000000
  c:向这个地址写数据  就是向SARM的这个地址写数据  FSMC就会自动把数据从数据线传过去
  d:那么定义一个结构  包含两个成员一个是REG就是命令  一个RAM就是数据 因为LCD接的数据宽度是16位  所以这两个成员都是16位的即占2个字节 每个成员占内存2个地址
  e: 由以上  可以设置这个结构在内存上的地址(16位宽的LCD 地址对应要移动1位 即A10是地址上的位11):
110  1100  0000  0000  0000  1000  0000  0000  写数据RAM存这:0x6c000800
110  1100  0000  0000  0000  0111  1111  1110  写命令REG存这:0x6c0007FE
所以可以得到这个结构体的定义 (按结构体排列规则 第一个成员的地址比后面的小)
typedef struct
{
   u16 LCD_REG; 地址是0x6c0007FE
   u16 LCD_RAM; 地址是0x6c000800
}LCD_TypeDef

一周热门 更多>