请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TPS92518 工具与软件:
你好。
我需要专家的帮助。
当使用以下设置配置 TPS92518时、读取的值可以正常工作。
不过、当我提高波特率时、读取的值将无法正常工作。 您能否帮助确定原因?

uint16_t tps_act_regi[7]={CONTROL,LED1_PKTH_DAC,LED2_PKTH_DAC,LED1_TOFF_DAC,
LED2_TOFF_DAC,LED1_MAXOFF_DAC,LED2_MAXOFF_DAC} ;
void WnR_AssembleSPICmd(void)
{
for(int i = 0; i<sizeof(tps_act_regi) / sizeof(tps_act_regi[0]) ; i++)
{
W_AssembleSPICmd[i]= AssembleSPICmd(1, tps_act_regi[i],tps92518_initValues[i]);
}
for(int i = 0; i<sizeof(tps_act_regi) / sizeof(tps_act_regi[0]) ; i++)
{
R_AssembleSPICmd[i]= AssembleSPICmd(0, tps_act_regi[i],tps92518_initValues[i]);
}
}
void spi_tps_For_Read(uint16_t AssembleSPICmd)
{
uint16_t ReadAssemble= AssembleSPICmd;
uint16_t rx_RValue;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_2)!=GPIO_PIN_RESET){};
HAL_SPI_Receive_DMA(&hspi3, (uint8_t*)&rx_RValue, sizeof(rx_RValue));
HAL_SPI_Transmit_DMA(&hspi3, (uint8_t*)&ReadAssemble, sizeof(ReadAssemble));
while (HAL_SPI_GetState(&hspi3) != HAL_SPI_STATE_READY) {}
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
Translate_spi(rx_RValue);
}
void spi_tps_For_Write(uint16_t AssembleSPICmd)
{
uint16_t WriteAssemble= AssembleSPICmd;
uint16_t rx_WValue;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_2)!=GPIO_PIN_RESET){};
HAL_SPI_Receive_DMA(&hspi3, (uint8_t*)&rx_WValue, sizeof(rx_WValue));
HAL_SPI_Transmit_DMA(&hspi3, (uint8_t*)&WriteAssemble, sizeof(WriteAssemble));
while (HAL_SPI_GetState(&hspi3) != HAL_SPI_STATE_READY) {}
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
Translate_spi_for_Read(rx_WValue);
}
void Translate_spi(uint16_t Receive_DMA)
{
#if 1
uint16_t rx_1 = Receive_DMA ;
#define SPE_MASK 0x8000
#define CMD_MASK 0x4000
#define ADDRESS_MASK 0x3E00
#define DATA_MASK 0x01FF
uint16_t address = (rx_1 & ADDRESS_MASK) >> 9;
uint16_t data = rx_1 & DATA_MASK;
switch(address)
{
case 0: Printf("INF: control "); break;
case 1: Printf("INF: status "); break;
case 2: Printf("INF: therm_warn_Lmt "); break;
case 3: Printf("INF: Led1_pkth_dac "); break;
case 4: Printf("INF: Led2_pkth_dac "); break;
case 5: Printf("INF: Led1_toff_dac "); break;
case 6: Printf("INF: Led2_toff_dac "); break;
case 7: Printf("INF: Led1_maxoff_dac "); break;
case 8: Printf("INF: Led2_maxoff_dac "); break;
case 9: Printf("INF: Vtherm "); break;
case 10: Printf("INF: Led1_most_recent"); break;
case 11: Printf("INF: Led1_last_on "); break;
case 12: Printf("INF: Led1_last_off "); break;
case 13: Printf("INF: Led2_most_rescent");break;
case 14: Printf("INF: Led2_last_on "); break;
case 15: Printf("INF: Led2_last_off "); break;
case 16: Printf("INF: Reset "); break;
default: Printf("INF: Read "); break;
}
if(address == 0)
{
switch(data)
{
case 28: Printf(": <Ch1 Ch2> Turn Off\r\n");break;
case 29: Printf(": <Ch1> On <Ch2> Off\r\n");break;
case 30: Printf(": <Ch1> Off <Ch2> On\r\n");break;
case 31: Printf(": <Ch1 Ch2> Turn On\r\n");break;
}
}
else{ Printf(": %u\r\n", data); }
#endif
}
void PKTHC_Control(int channel, uint16_t Pkthc)
{
int Sequence;
if(channel == 0)
{
Sequence = 1;
tps92518_initValues[1] = Pkthc;
WnR_AssembleSPICmd();
spi_tps_For_Write(W_AssembleSPICmd[Sequence]);
spi_tps_For_Read(R_AssembleSPICmd[Sequence]);
}
else if(channel == 1)
{
Sequence = 2;
tps92518_initValues[2] = Pkthc;
WnR_AssembleSPICmd();
spi_tps_For_Write(W_AssembleSPICmd[Sequence]);
spi_tps_For_Read(R_AssembleSPICmd[Sequence]);
}
else ;
}
在预分频器值为8 (5.25Mbit/s)、4 (10.5Mbit/s)和2 (21.0Mbit/s)时、读取的值不能正常工作。 但是、写入函数仍然可以正常工作。

