当前位置: 首页 > news >正文

基于CYT4BB MCAL完成对DS_SA47321功能开发

一. SPI通信API

static boolean Sa9471SpiSync(Sa47321SpiCmd_e cmd, const Sa47321RegAddr_e addr, const uint8 wData, uint8* rData)
{
   
    boolean rRet = TRUE;
    uint8   parityValue = 0;
    Spi_SeqResultType seqRet = SPI_SEQ_OK;
    
    /* 
        SPI_SEQ_OK = 0,     ///<  @brief  The last transmission of the Sequence has been finished successfully. 
        SPI_SEQ_PENDING,    ///<  @brief  The SPI handler/Driver is performing a SPI Sequence. 
        SPI_SEQ_FAILED,     ///<  @brief  The last transmission of the Sequence has failed. 
        SPI_SEQ_CANCELLED   ///<  @brief  The last transmission of the Sequence has been cancelled by the user. 
    */
    Std_ReturnType ret = E_OK;

    ///< Set setup an external buffer to be used by a specific channel.
    ret = Spi_SetupEB(DS_SA47321_SPI_CHANNEL, (uint8*)&s_Dssa47321.TxFrame.U, (uint8*)&s_Dssa47321.RxFrame.U, 2);
    if(ret == E_OK)
    {
   
        s_Dssa47321.RxFrame.U       = 0;
        s_Dssa47321.TxFrame.U       = 0;
        s_Dssa47321.TxFrame.B.Cmd   = cmd;
        s_Dssa47321.TxFrame.B.A0_A5 = addr;
        s_Dssa47321.TxFrame.B.D0_D7 = wData;
        for(uint8 i=1; i<16; i++)
        {
   
            if(s_Dssa47321.TxFrame.U & (1<<i))
            {
   
                parityValue++;
            }
        }
        s_Dssa47321.TxFrame.B.T = ((parityValue%2) != 0)? 1:0;
        ///< Start transmit data of sequence on the SPI bus synchronously.
        ret = Spi_SyncTransmit(DS_SA47321_SPI_SEQUENCE);
        if(ret == E_OK)
        {
   
            do
            {
   
                ///< Get the last transmission result of the specified Sequence.
                seqRet = Spi_GetSequenceResult(DS_SA47321_SPI_SEQUENCE);
                if((seqRet == SPI_SEQ_OK) && (cmd == ReadReg))
                {
   
                    *rData = s_Dssa47321.RxFrame.B.D0_D7;
                    break;
                }
                else if(seqRet == SPI_SEQ_FAILED)
                {
   
                    rRet = FALSE;
                    break;
                }
            } while (seqRet == SPI_SEQ_PENDING);  
        }
        else
        {
   
            rRet = FALSE;
        }
    }
    else
    {
   
        rRet = FALSE;
    }

    return rRet;
}
  • Spi_SetupEB():设置SPI发送接收缓存buffer。
  • Spi_SyncTransmit():启动同步传输,该接口中完成数据的发送和接收。
  • Spi_GetSequenceResult():获取当前SPI通信状态。
  • 返回值:当读写操作成功完成后,返回TRUE否则返回FALSE。
    | - 执行写操作时,SA47321接收到写操作并执行成功后,会将发送的数据从SDO引脚返回给MCU。
    | - 执行完读操作时,SA47321接收到读操作并执行成功后,CMD默认回复1,S0~S5为全0,D0 ~ D7但会寄存器数据,T返回奇偶校验位。

二. 获取SPI通信状态API

static boolean GetSpiState(void)
{
   
    boolean ret = FALSE;

    for (uint8 i = 0; i < 5; i++)
    {
   
http://www.dtcms.com/a/110065.html

相关文章:

  • python match case语法
  • 2025年中级社会工作者考试模拟题
  • 大模型备案材料:评估测试题集真实案例详解
  • 基数排序算法解析与TypeScript实现
  • 《双影奇境》手机版上线?ToDesk用跨平台技术实现「全设备云电脑3A游戏」
  • liunx日志查询常用命令总结
  • Cesium 时间线 及 坐标转换
  • PyTorch复现逻辑回归
  • 高效深度学习lecture03
  • 强化学习DDPG算法
  • 【C++进阶九】继承和虚继承
  • 【新书上市】《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》,高校教学推荐,STM32入门必读书籍!
  • TVM流程及调优
  • skynet.start 的作用详细解析
  • Jira 停售一周年:国产研发管理平台能否扛起替代大旗?
  • 【补题】Xi‘an Invitational 2023 E. Merge the Rectangles
  • 【PHP】- 字符串,数组,字典常用操作
  • Cribl 脱敏mask
  • (三)机器学习---线性回归及其Python实现
  • 聚焦建筑业碳中和,楼宇自控系统应如何发挥建筑节能价值
  • 大语言模型中的嵌入模型
  • (C语言)单链表(2.0)数据结构(指针,单链表教程)
  • 栈和队列的概念
  • dfs递归回溯的两种体型
  • 水下声呐探测仪,应急救援中的高效水下定位技术|深圳鼎跃
  • Nuxt3项目的SEO优化(robots.txt,页面tdk,伪静态.html,sitemap.xml动态生成等)
  • 开源虚拟化管理平台Proxmox VE部署超融合
  • RHCSA LINUX系统文件管理
  • 市场交易策略优化与波动管理
  • 6.模型训练4-毕设篇