如何解决I2C 协议 使用 TM4C1294NCPDT 和 MAX6955 LED 显示驱动器
请找到以下代码片段并告诉我解决问题的方法。
#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,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,0x08 );
I2CMasterControl( I2C0_BASE,reg_scanLimit );
I2CMasterControl( I2C0_BASE,0x07 );
I2CMasterControl( I2C0_BASE,reg_controlRegister );
I2CMasterControl( I2C0_BASE,0x01 );
I2CMasterControl( I2C0_BASE,reg_digitType );
I2CMasterControl( I2C0_BASE,reg_displayTest );
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\n",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,0x43 );
}
}
我正在尝试开发 I2C 通信协议以在 MAX6955 上显示相应的数字。之前,我将数据写入数字中。我必须初始化 MAX6955 显示驱动程序。
它似乎没有响应,无法将数据写入 Digit。
请看一看,让我知道故障排除或不同的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。