Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
150 views
in Technique[技术] by (71.8m points)

c - I2C protocol Using TM4C1294NCPDT and MAX6955 LED Display driver

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...