hi,
i am using the TM4C123GH6PM microcontroller. now i am working on the SPI communication.
i get the reference code from the application datasheet. i try to read the one energy meter ic (M90E32AS) registers.
this energy meter ic will communicate only through SPI.
i try to read some register values. i cannot get the proper default value of those registers. i am not sure my software is correct or not.
can you please tell me my program is correct for reading those register or not ??
program:
#include <stdint.h>
#include <stdbool.h>
#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; // address value
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;
// Bit-wise reverses a number.
//uint8_t Reverse(uint8_t ui8Number)
//{
// uint8_t ui8Index;
// uint8_t ui8ReversedNumber = 0;
// for(ui8Index=0; ui8Index<8; ui8Index++)
// {
// ui8ReversedNumber = ui8ReversedNumber << 1;
// ui8ReversedNumber |= ((1 << ui8Index) & ui8Number) >> ui8Index;
// }
//return ui8ReversedNumber;
//}
int main(void)
{
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); // for mode pin in that energy meter ic
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_MODE_0, SSI_MODE_MASTER, 10000, 16);
SSIEnable(SSI0_BASE);
while(1)
{
/* ****************************** master ******************************/
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);
}
}
i try to read that register : 0D . the default value is 13EC . but always i get FFFF only.
can you please verify my code tell me some solution for this issue.
regards
Arun Kumar.N