c - 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, 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\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, reg_digit4, 0x49 );
writeI2C0( SLAVEADDRESS_EXT, reg_digit5, 0x43 );
}
}
我正在尝试开发 I2C 通信协议以在 MAX6955 上显示相应的数字。之前,我将数据写入数字。我必须初始化 MAX6955 显示驱动程序。
它似乎没有响应,无法将数据写入 Digit。
请看一下,让我知道故障排除或不同的方法。
解决方案
推荐阅读
- sql - on 子句的 where 条件
- r - 查看R中的一列中存在重复的所有行
- python - 如何在终端中写入包含特定文本的输出
- c++builder - 如何使用 TIdHTTP Indy 组件下载文件?
- .net - WaitUntil IF 条件
- c++ - 什么是在运行时动态转换和调用映射中的变量参数函数而不使用外部库的好方法
- vba - 如何从 VBA 脚本调用批处理文件
- logging - 如何在 Google Cloud Functions 中打印日文日志
- javascript - Javascript数组排序具有键值条件的唯一对象
- python - Python 和 Selenium 错误“发生异常:NoSuchElementException”