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

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

[复制链接]
  • TA的每日心情
    开心
    2024-1-4 09:46
  • 签到天数: 2 天

    [LV.1]初来乍到

    16

    主题

    26

    回帖

    236

    积分

    中级会员

    积分
    236
    发表于 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呢?

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:53
  • 签到天数: 118 天

    [LV.6]常住居民II

    26

    主题

    1226

    回帖

    3837

    积分

    论坛元老

    积分
    3837
    发表于 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, 2024-4-20 07:48 , Processed in 0.053222 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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