Please find the below code snippet and let me know that ways to troubleshoot.
#include <stdbool.h>
#include <stdint.h>
#include <stdarg.h>
#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/gpio.h"
#define SLAVEADDRESS_EXT 0x65
#define NUM_OF_I2CBYTES 255
#define reg_noOp 0x00
#define reg_decodeMode 0x01
#define reg_globalIntensity 0x02
#define reg_scanLimit 0x03
#define reg_controlRegister 0x04
#define reg_displayTest 0x07
#define reg_digitType 0x0C
#define reg_intensity10 0x10
#define reg_internsity32 0x11
#define reg_internsity54 0x12
#define reg_internsity76 0x13
#define USE_GLOBAL 0x00
#define USE_DISCRETE 0x40
#define RUN 0x02
#define SHUTDOWN 0x00
#define reg_digit0 0x20
#define reg_digit1 0x21
#define reg_digit2 0x22
#define reg_digit3 0x23
#define reg_digit4 0x24
#define reg_digit5 0x25
#define reg_digit6 0x26
#define reg_digit7 0x27
uint32_t ui32SysClock;
void writeI2C0( uint8_t slaveaddress, uint8_t device_register, uint8_t device_data )
{
I2CMasterSlaveAddrSet( I2C0_BASE, SLAVEADDRESS_EXT, false );
//register to be read
I2CMasterDataPut( I2C0_BASE, device_register );
//send control byte and register address byte to slave device
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START );
//wait for MCU to finish transaction
while( I2CMasterBusy( I2C0_BASE ) );
// I2CMasterSlaveAddrSet(I2C0_BASE, device_address, true);
//specify data to be written to the above mentioned device_register
I2CMasterDataPut( I2C0_BASE, device_data );
//wait while checking for MCU to complete the transaction
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH );
//wait for MCU & device to complete transaction
while( I2CMasterBusy( I2C0_BASE ) );
}
void initMAX6955( void )
{
I2CMasterSlaveAddrSet( I2C0_BASE, SLAVEADDRESS_EXT, false );
I2CMasterDataPut( I2C0_BASE, reg_decodeMode );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0xFF );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, reg_globalIntensity );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0x08 );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, reg_scanLimit );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0x07 );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, reg_controlRegister );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0x01 );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, reg_digitType );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0xFF );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, reg_displayTest );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT );
while( I2CMasterBusy( I2C0_BASE ) );
I2CMasterDataPut( I2C0_BASE, 0x01 );
I2CMasterControl( I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH );
while( I2CMasterBusy( I2C0_BASE ) );
}
void InitConsole( void )
{
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOA );
GPIOPinConfigure( GPIO_PA0_U0RX );
GPIOPinConfigure( GPIO_PA1_U0TX );
SysCtlPeripheralEnable( SYSCTL_PERIPH_UART0 );
UARTClockSourceSet( UART0_BASE, UART_CLOCK_PIOSC );
GPIOPinTypeUART( GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1 );
UARTStdioConfig( 0, 115200, 16000000 );
}
int main( void )
{
ui32SysClock = SysCtlClockFreqSet( (SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240), 80000000 );
SysCtlPeripheralEnable( SYSCTL_PERIPH_I2C0 );
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB );
GPIOPinConfigure( GPIO_PB2_I2C0SCL );
GPIOPinConfigure( GPIO_PB3_I2C0SDA );
GPIOPinTypeI2CSCL( GPIO_PORTB_BASE, GPIO_PIN_2 );
GPIOPinTypeI2C( GPIO_PORTB_BASE, GPIO_PIN_3 );
I2CMasterEnable( I2C0_BASE );
I2CMasterInitExpClk( I2C0_BASE, ui32SysClock, false );
InitConsole();
UARTprintf( "The slave address: %X
", SLAVEADDRESS_EXT );
initMAX6955();
while( 1 )
{
writeI2C0( SLAVEADDRESS_EXT, reg_digit1, 0x41 );
writeI2C0( SLAVEADDRESS_EXT, reg_digit2, 0x58 );
writeI2C0( SLAVEADDRESS_EXT, reg_digit3, 0x49 );
writeI2C0( SLAVEADDRESS_EXT, reg_digit4, 0x4D );
writeI2C0( SLAVEADDRESS_EXT, reg_digit5, 0x2D );
writeI2C0( SLAVEADDRESS_EXT, reg_digit4, 0x49 );
writeI2C0( SLAVEADDRESS_EXT, reg_digit5, 0x43 );
}
}
I'm trying to develop the I2C communication protocol to display respective digits on MAX6955. Before, I write the data in the digit. I have to initialize the MAX6955 display driver.
It seems to be unresponsive and unable to write the data in the Digit.
Please have a look and let me know the troubleshooting or different approach.
question from:
https://stackoverflow.com/questions/65890318/i2c-protocol-using-tm4c1294ncpdt-and-max6955-led-display-driver