找回密码
 立即注册
查看: 1646|回复: 1

void SPI_Read_Nbytes(u32 addr, u16 size)例程问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-07-02 10:09:53

17

主题

29

回帖

299

积分

中级会员

积分
299
发表于 2023-3-18 14:22:30 | 显示全部楼层 |阅读模式
/************************************************
从Flash中读取数据
入口参数:
    addr   : 地址参数
    buffer : 缓冲从Flash中读取的数据
    size   : 数据块大小
出口参数:
    无
************************************************/
void SPI_Read_Nbytes(u32 addr, u16 size)
{
    if(size == 0)   return;
    if(!B_FlashOK)  return;
    while(DmaFlag);                     //DMA忙检测
    while(CheckFlashBusy() > 0);        //Flash忙检测

    SPI_CE_Low();                       //enable device
    SPI_WriteByte(SFC_READ);            //read command

    SPI_WriteByte(((u8 *)&addr)[1]);    //设置起始地址
    SPI_WriteByte(((u8 *)&addr)[2]);
    SPI_WriteByte(((u8 *)&addr)[3]);

    DmaFlag = 1;
    DMA_SPI_AMT = size-1;        //设置传输总字节数:n+1
    DMA_SPI_CR |= 0x40;     //开始SPI_DMA主模式操作
}

这个例程,参数长度为16位,只设置了DMA_SPI_AMT,是不是少设置了DMA_SPI_AMTH呢?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-3-18 16:13:46 | 显示全部楼层
STC8系列的芯片DMA存储器长度上限是256,所以传输总字节寄存器DMA_SPI_AMT只有一个字节,没有DMA_SPI_AMTH。

STC32系列的芯片DMA存储器长度上限是65536,才有DMA_SPI_AMT与DMA_SPI_AMTH。
如果是在STC32系列芯片上使用的话,请参考STC32G实验箱例程包里的例子“79-UART-SPI-LCM_DMA_交替使用下载显示图片例程”
1.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 06:36 , Processed in 0.107261 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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