找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2317|回复: 1
收起左侧

关于AD7193的驱动 stm8s单片机SPI代码编写问题

[复制链接]
ID:610433 发表于 2019-10-10 16:59 | 显示全部楼层 |阅读模式
下了官方的驱动,但是spi初始化以及读取自己写的,出现了问题,关于spi不太懂他的步骤看一下我哪里写错了?

unsigned char SPI_Read7193(unsigned char slaveDeviceId,
                       unsigned char* data,
                       unsigned char bytesNumber)
{
  unsigned char byte = 0;
  if(slaveDeviceId == AD7193_SLAVE_ID)PMOD1_CS_LOW;

  for(byte = 0; byte < bytesNumber; byte++)
  {
    while(SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);
    *data++ = SPI_ReceiveData();

  }
  if(slaveDeviceId == AD7193_SLAVE_ID)PMOD1_CS_HIGH;

  return bytesNumber;
}


unsigned char SPI_Write7193(unsigned char slaveDeviceId,
                        unsigned char* data,
                        unsigned char bytesNumber)
{
  unsigned char byte = 0;
  if(slaveDeviceId == AD7193_SLAVE_ID)PMOD1_CS_LOW;

  for(byte = 0; byte < bytesNumber; byte++)
  {
    while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
    SPI_SendData(*data++);

  }
  if(slaveDeviceId == AD7193_SLAVE_ID)PMOD1_CS_HIGH;

  return bytesNumber;
}





这个是官方给的别的单片机的例子,我不太了解这个单片机和寄存器,你们可以参考一下


unsigned char SPI_Read(unsigned char slaveDeviceId,
                       unsigned char* data,
                       unsigned char bytesNumber)
{
    unsigned char byte = 0;

    if(slaveDeviceId == 1)
    {
        PMOD1_CS_LOW;
    }
    if(slaveDeviceId == 2)
    {  
        ST7579_CS_LOW;
    }
    for(byte = 0; byte < bytesNumber; byte++)
    {
        SIO10 = data[byte];
        __no_operation();
        __no_operation();
        while(SSR02 & 0x0040);
        data[byte] = SIO10;
    }
    if(slaveDeviceId == 1)
    {
        PMOD1_CS_HIGH;
    }
    if(slaveDeviceId == 2)
    {
        ST7579_CS_HIGH;
    }

    return bytesNumber;
}

/***************************************************************************//**
* @brief Writes data to SPI.
*
* @param slaveDeviceId - The ID of the selected slave device.
* @param data - Data represents the write buffer.
* @param bytesNumber - Number of bytes to write.
*
* @return Number of written bytes.
*******************************************************************************/
unsigned char SPI_Write(unsigned char slaveDeviceId,
                        unsigned char* data,
                        unsigned char bytesNumber)
{
    unsigned char byte = 0;
    unsigned char read = 0;

    if(slaveDeviceId == 1)
    {
        PMOD1_CS_LOW;
    }
    if(slaveDeviceId == 2)
    {        
        ST7579_CS_LOW;          // Assert CS low
    }
    for(byte = 0; byte < bytesNumber; byte++)
    {
        SIO10 = data[byte];
        __no_operation();
        __no_operation();
        while(SSR02 & 0x0040);
        read = SIO10;
    }
    if(slaveDeviceId == 1)
    {
        PMOD1_CS_HIGH;
    }
    if(slaveDeviceId == 2)
    {
        ST7579_CS_HIGH;         // Assert CS high      
    }

    return bytesNumber;
}


回复

使用道具 举报

ID:282850 发表于 2019-10-11 09:23 | 显示全部楼层
同系列的SPI都会不同,如MSP430的F149 与F2553程序差异大,你问题又没说清,没人能帮你
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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