基于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++)
    {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值