硬汉嵌入式论坛

 找回密码
 立即注册
查看: 678|回复: 3
收起左侧

[DMA] DAC8563的驱动的中断和DMA的区别,g_spiTxBuf 的数据为什么是反的?SPI怎么处理DMA多出来的8位

[复制链接]

10

主题

52

回帖

82

积分

初级会员

积分
82
发表于 2024-11-18 11:15:15 | 显示全部楼层 |阅读模式
关于DAC8563的驱动,中断方式和DMA方式
DMA是:SPI的DataSize是24位,DMA位宽32位

[C] 纯文本查看 复制代码
void DAC8562_WriteCmd(uint32_t _cmd)
{
	g_spiLen = 0;
	g_spiTxBuf[g_spiLen++] = (_cmd);
	g_spiTxBuf[g_spiLen++] = (_cmd >> 8);
	g_spiTxBuf[g_spiLen++] = (_cmd >> 16);
	g_spiTxBuf[g_spiLen++] = 0;
HAL_SPI_Transmit_DMA(&hspi, (uint8_t*)g_spiTxBuf, g_spiLen/4);		
}




中断方式是:SPI的DataSize是8位
[C] 纯文本查看 复制代码
void DAC8562_WriteCmd(uint32_t _cmd)
{
	g_spiLen = 0;
	g_spiTxBuf[g_spiLen++] = (_cmd >> 16);
	g_spiTxBuf[g_spiLen++] = (_cmd >> 8);
	g_spiTxBuf[g_spiLen++] = (_cmd);
	HAL_SPI_TransmitReceive_IT(&hspi, (uint8_t*)g_spiTxBuf, (uint8_t *)g_spiRxBuf, g_spiLen);
}



我想问,g_spiTxBuf 的数据为什么是反的?SPI怎么处理DMA多出来的8位?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-11-18 15:10:04 | 显示全部楼层
1、DMA配置的是字传输,SPI配置的MSB先传输高位。
2、
234.png


回复

使用道具 举报

10

主题

52

回帖

82

积分

初级会员

积分
82
 楼主| 发表于 2024-11-19 13:29:08 | 显示全部楼层
eric2013 发表于 2024-11-18 15:10
1、DMA配置的是字传输,SPI配置的MSB先传输高位。
2、

不好意思,还是没明白,
(1)是不是,DMA把32位数据一次性传到SPI,SPI舍弃末尾8位,传输前24位,?而且是按照从高到低的顺序传?
(2)中断方式可以设置SPI的DataSize是24位吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-11-20 09:32:45 | 显示全部楼层
quanshimutou 发表于 2024-11-19 13:29
不好意思,还是没明白,
(1)是不是,DMA把32位数据一次性传到SPI,SPI舍弃末尾8位,传输前24位,? ...

1、对
2、可以。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-28 19:34 , Processed in 0.451639 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表