工具/软件:Starterware
您好!
我们的项目之一是使用 TI TM4C1294NCPDT 与 EEPROM (LE25U40CQH)进行连接。
本期:
- 下载 TI 的代码我们正在写入一些数据、但会读回。 其中读取数据始终为0。
请找到我使用过的以下代码。
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/ssi.h"
#include "utils/uartstdio.h"
//
//
//! \addtogroup example_list
//!
UART 回波(UART_ECHO)
//!
//! 此示例应用利用 UART 来回显文本。 第一个 UART
//! (连接到评估板上的 USB 调试虚拟串行端口)
//! 将配置为115、200波特、8-n-1模式。 接收到的所有字符
//! UART 被发送回 UART。
//
#define NUM_SSI_DATA 8 //要发送和接收的字节数。
//
//
//系统时钟速率,单位为 Hz。
//
//
uint32_t g_ui32SysClock;
//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)
{
}
#endif
//
//
// UART 中断处理程序。
//
//
无效
UARTIntHandler (空)
{
uint32_t ui32Status;
//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART3_base、true);
//
//清除已发出的中断。
//
ROM_UARTIntClear (UART3_base、ui32Status);
//
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART3_base))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
ROM_UARTCharPutNonBlocking (UART3_base、
ROM_UARTCharGetNonBlocking (UART3_base));
//
//闪烁 LED 以显示字符传输正在发生。
//
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_0、GPIO_PIN_0);
//
//延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
//
SysCtlDelay (g_ui32SysClock /(1000 * 3));
//
//关闭 LED
//
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_0、0);
}
}
//
//
//向 UART 发送字符串。
//
//
无效
UARTSend (const uint8_t * pui8缓冲器、uint32_t ui32计数)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{
//
//将下一个字符写入 UART。
//
ROM_UARTCharPutNonBlocking (UART3_base、* pui8Buffer++);
}
}
//
//
//此示例演示了如何将一串数据发送到 UART。
//
//
内部
main (空)
{
uint32_t pui32Data[NUM_SSI_DATA];
uint32_t pui32DataTx[NUM_SSI_DATA];
uint32_t pui32DataRx[NUM_SSI_DATA];
//uint32_t* pui32DataRx;
uint32_t ui32Index;
//uint32_t pui32Data[NUM_SSI_DATA];
//
//将时钟设置为直接从频率为120MHz 的晶体运行。
//
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);//必须启用 SSI0外设才能使用。
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//需要启用 GPIO 端口 A 以便可以使用 SSI 引脚。
GPIOPinConfigure (GPIO_PF3_SSI3CLK);//在 PA2上配置 SSI SCLK
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);//~CS -将其配置为 GPIO 输出
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);//~CS -将其设置为逻辑高电平
GPIOPinConfigure (GPIO_PF1_SSI3XDAT0);//在 PA4上配置 MOSI
GPIOPinConfigure (GPIO_PF0_SSI3XDAT1);//在 PA5上配置 MISO
GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_0| GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3);//配置 SSI 引脚的 GPIO 设置。
SSIConfigSetExpClk (SSI3_base、g_ui32SysClock、SSI_FRF_MOTO_MOTO_MODE_0、//为 SPI 主控模式配置和启用 SSI 端口。 使用 SSI3、
SSI_MODE_MASTER、1000000、8);//系统时钟电源、空闲时钟电平低电平和低电平有效时钟输入
//飞思卡尔 SPI 模式、主控模式、1MHz SSI 频率和8位数据。
//对于 SPI 模式,可以设置 SSI 时钟的极性
//单元空闲。 您还可以配置所需的时钟边沿
//在上捕获数据。 有关的更多信息、请参阅数据表
//不同的 SPI 模式
SSIEnable (SSI3_base);//启用 SSI0模块。
//
//初始化要发送的数据。
//
// pui32DataTx[0]= 0x06;//将数据写入0x000000
pui32DataTx[0]= 0x02;//
pui32DataTx[1]= 0x00;
pui32DataTx[2]= 0x00;
pui32DataTx[3]= 0x00;
pui32DataTx[4]= 0x56;
pui32DataTx[5]= 0x57;
pui32DataTx[6]= 0x58;
//虚拟字节来生成用于从 MISO 读取1个字节的 SCLK
//
//发送3个字节的数据。
//
//启用用于板载 LED 的 GPIO 端口。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
//
//为 LED (PN0)启用 GPIO 引脚。
//
ROM_GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_0|GPIO_PIN_1);
//
//启用此示例使用的外设。
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART3);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
//
//启用处理器中断。
//
//rom_IntMasterEnable();
//
//将 GPIO A0和 A1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PJ0_U3RX);
GPIOPinConfigure (GPIO_PJ1_U3TX);
ROM_GPIOPinTypeUART (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1);
//
//将 UART 配置为115、200、8-N-1操作。
//
ROM_UARTConfigSetExpClk (UART3_base、g_ui32SysClock、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//启用 UART 中断。
//
//rom_IntEnable (INT_UART3);
///ROM_UARTIntEnable (UART3_base、UART_INT_RX | UART_INT_RT);
//
//提示输入文本。
//
UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16);
SysCtlDelay (10000000);//延迟
//
//循环通过 UART 永久回显数据。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);//~CS -将其设置为逻辑低电平-开始传输
SysCtlDelay (100);
SSIDataPut (SSI3_base、0x05);
SSIDataGet (SSI3_base、&pui32DataRx[0]);
pui32DataRx[0]&=0x00FF;
UARTCharPut (UART3_base、pui32DataRx[0]);
SysCtlDelay (100);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);// CS 高电平
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);//~CS -将其设置为逻辑低电平-开始传输
SysCtlDelay(1);
for (ui32Index = 0;ui32Index < NUM_SSI_DATA;ui32Index++)
{
SSIDataPut (SSI3_base、pui32DataTx[ui32Index]);
// UARTCharPut (UART3_base、'a');
SysCtlDelay (10);
//SSIDataGet (SSI3_base、&pui32DataRx[ui32Index]);
//pui32DataRx[ui32Index]&=0xFF00;
//UARTCharPut (UART3_base、pui32DataRx[ui32Index]);
}
SysCtlDelay(1);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);//~CS -将其设置为逻辑高电平-传输结束
SysCtlDelay (10000000);
pui32Data[0]= 0x03;
pui32Data[1]=0x00;
pui32Data[2]=0x00;
pui32Data[3]=0x00;
pui32Data[4]=0xff;
pui32Data[5]= 0xff;
pui32Data[6]= 0xff;
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);//~CS -将其设置为逻辑低电平-开始传输
SysCtlDelay(1);
for (ui32Index = 0;ui32Index < NUM_SSI_DATA;ui32Index++)
{
SSIDataPut (SSI3_base、pui32Data[ui32Index]);
//UARTCharPut (UART3_base、'a');
SSIDataGet (SSI3_base、&pui32DataRx[ui32Index]);
pui32DataRx[ui32Index]&=0x00FF;
UARTCharPut (UART3_base、pui32DataRx[ui32Index]);
SysCtlDelay (10000000);
}
SysCtlDelay(1);
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);//~CS -将其设置为逻辑高电平-传输结束
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_0、GPIO_PIN_0);
while (1)
{
UARTCharPut (UART3_base、'H');
UARTCharPut (UART3_base、'I');
SysCtlDelay (10000000);
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_1、GPIO_PIN_1);
SysCtlDelay (10000000);
GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_1、0x0);
}
}
请建议
2.请检查以下 EEPROM 的原理图接口是否正常。
请见所附文件中的原理图。
此致、
Sateesh。