您好!
我使用的是 TM4C123GH6PM 微控制器。 现在、我正在进行 SPI 通信。
我从应用数据表中获取参考代码。 我尝试读取单个能量计 IC (M90E32AS)寄存器。
该能量计 IC 将仅通过 SPI 进行通信。
我尝试读取一些寄存器值。 我无法获得这些寄存器的正确默认值。 我不确定我的软件是否正确。
您能告诉我我我的程序是否正确读取这些寄存器?
计划:
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_ssi.h"
#include "inc/hw_types.h"
#include "driverlib/ssi.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#define NUM_SSI_DATA 8.
const uint8_t pui8DataTx[NUM_SSI_DATA]={0x88、0xf8、0xf8、0x88、0x01、 0x1f、0x1F、0x01};
uint32_t REG_addr_H = 0x00000010;
uint32_t REG_addr_L = 0x0000000D;//地址值
uint32_t REG_DATA_H = 0x00000000;
uint32_t REG_DATA_L = 0x00000000;
uint32_t rec_addr_h = 0x00000000;
uint32_t rec_addr_L = 0x00000000;
uint32_t rec_data_h = 0x00000000;
uint32_t rec_data_L = 0x00000000;
//逐位反转数字。
//uint8_t 反向(uint8_t ui8Number)
//{
// uint8_t ui8Index;
// uint8_t ui8ReversedNumber = 0;
// for (ui8Index=0;ui8Index<8;ui8Index++)
//{
// ui8ReversedNumber = ui8ReversedNumber << 1;
// ui8ReversedNumber |=((1 << ui8Index)& ui8Number)>> ui8Index;
//}
//返回 ui8ReversedNumber;
//}
int main (空)
{
uint32_t ui32Index;
uint32_t ui32Data;
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA5_SSI0TX);
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5|GPIO_PIN_3|GPIO_PIN_2);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//针对该能量计 IC 中的 MODE 引脚
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1_GPIO_PIN_2);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);
SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、10000、 16);
SSIEnable (SSI0_BASE);
while (1)
{
/********* 主控 /
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、0);
SSIDataPutNonBlocking (SSI0_BASE、REG_addr_H);
SSIDataGet (SSI0_BASE、&(rec_addr_H));
SysCtlDelay (100);
SSIDataPutNonBlocking (SSI0_BASE、REG_addr_L);
SSIDataGet (SSI0_BASE、&(rec_addr_L));
SysCtlDelay (100);
SSIDataPutNonBlocking (SSI0_BASE、REG_DATA_H);
SSIDataGet (SSI0_BASE、&(rec_data_H));
SysCtlDelay (100);
SSIDataPutNonBlocking (SSI0_BASE、REG_DATA_L);
SSIDataGet (SSI0_BASE、&(rec_data_L));
SysCtlDelay (100);
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);
}
}
我尝试读取该寄存器:0D。 默认值为13EC。 但我始终只获得 FFFF。
您能否验证我的代码、请告诉我此问题的解决方案。
此致
Arun Kumar.N