请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377D 工具/软件:Code Composer Studio
作为标题、由于芯片自身的 RAM 仅为几十 k、因此需要根据例程的配置使用外部 RAM。 指针的起始地址为0x300000、定义的长度为0xFFFF、该值为0以增加到0xFFFF。
在地址0x300000~0x30FFFF 处、数据是正确的、0~FFFE。 但是、地址0x30FFFF 处的值也被分配给0~FFFE。 定义了另一个指针、地址位为0x30FFFF、长度为 FFFF、地址分配为 AAAA。 地址0x300000~0x30FFFF 的值也更改为 AAAA。 请一个好的人来帮助我。 结果和代码如下:
//######################################################################################################################
//文件: emif1_16bit_asram.c
//标题: 访问16位 ASRAM 的 EMIF1模块。
//
//! addtogroup cpu01_example_list
//!
//!
//! 该示例将 EMIF1配置为16位异步模式
//! 此示例使用 CS2作为芯片启用。
//!
//! b 监视\b 变量:\n
//! -\b TEST_STATUS -如果测试正确完成、相当于\b TEST_PASS、
//! 否则、该值设置为\b test_fail
//! -\b 勘误表-错误计数器
//!
//
//
//######################################################################################################################
//$TI 发行版:F2837xS 支持库 v180美元
//$Release Date:星期五11月 6日16:27:58 CST 2015 $
//版权所有:版权所有(C) 2014-2015 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################
//文件: emif1_16bit_asram.c
//标题: 访问16位 ASRAM 的 EMIF1模块。
//
//! addtogroup cpu01_example_list
//!
EMIF 异步模块(emif1_16bit_asram)
//!
//! 该示例将 EMIF1配置为16位异步模式
//! 此示例使用 CS2作为芯片启用。
//!
//! b 监视\b 变量:\n
//! -\b TEST_STATUS -如果测试正确完成、相当于\b TEST_PASS、
//! 否则、该值设置为\b test_fail
//! -\b 勘误表-错误计数器
//!
//
//
//######################################################################################################################
//$TI 发行版:F2837xS 支持库 v180美元
//$Release Date:星期五11月 6日16:27:58 CST 2015 $
//版权所有:版权所有(C) 2014-2015 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//######################################################################################################################
#include "F28x_Project.h" //设备头文件和示例 include 文件
#define TEST_PASS 0xABCDABCD
#define TEST_FAIL 0xDEADDEEAD
#define TEST_FAIL 0xDEADDEEAD
uint16 * ExRamStart =(uint16*) 0x300000;
uint16 *开始=(uint16*) 0x30FFFF;
extern void setup_emif1_pinmux_async_16bit (uint16);
//########## EMIF1-32位 ASRAM 测试##################
#define EMIF1 0
#define EMIF2 1.
#define EMIF2 1.
#define MEM_D_width 1 // 16位存储器接口
#define TO_ARGE_TIME 0 // 2个 EMIF 时钟的周转时间
#define RD_SETUP_TIME 0 //读取1个 EMIF 时钟的建立时间
#define RD_STROBE _TIME 3 //读取4个 EMIF 时钟的选通时间
#define RD_HOLD_TIME 0 //读取1个 EMIF 时钟的保持时间
#define WR_SETUP_TIME 0 // 1 EMIF 时钟的写入保持时间
#define WR_STROBE _TIME 0 // 1 EMIF 时钟的写入建立时间
#define WR_HOLD_TIME 0 // 1 EMIF 时钟的写入保持时间
#define extend_wait 0 //禁用扩展等待
#define STROBE _SEL 0 //禁用选通模式。
#define WAIT_POLIC_INV 0
#define WAIT_COUNT 0
#define TO_ARGE_TIME 0 // 2个 EMIF 时钟的周转时间
#define RD_SETUP_TIME 0 //读取1个 EMIF 时钟的建立时间
#define RD_STROBE _TIME 3 //读取4个 EMIF 时钟的选通时间
#define RD_HOLD_TIME 0 //读取1个 EMIF 时钟的保持时间
#define WR_SETUP_TIME 0 // 1 EMIF 时钟的写入保持时间
#define WR_STROBE _TIME 0 // 1 EMIF 时钟的写入建立时间
#define WR_HOLD_TIME 0 // 1 EMIF 时钟的写入保持时间
#define extend_wait 0 //禁用扩展等待
#define STROBE _SEL 0 //禁用选通模式。
#define WAIT_POLIC_INV 0
#define WAIT_COUNT 0
UINT16 勘误计数= 0;
uint32 test_status;
int i;
void main (void)
{
// char 勘误表_local;
//test_status = test_fail;
InitSysCtrl();
Dint;
// 将 PIE 控制寄存器初始化为默认状态。
// 默认状态为禁用所有 PIE 中断和标志
// 被清除。
// 此函数位于 F2837xS_PIECTRL.c 文件中。
InitPieCtrl();
// 将 PIE 控制寄存器初始化为默认状态。
// 默认状态为禁用所有 PIE 中断和标志
// 被清除。
// 此函数位于 F2837xS_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
EALLOW;
IER = 0x0000;
IFR = 0x0000;
EDIS;
//使用指向 shell 中断的指针初始化 PIE 矢量表
// GService 例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
InitPieVectTable();
EALLOW;
IER = 0x0000;
IFR = 0x0000;
EDIS;
//使用指向 shell 中断的指针初始化 PIE 矢量表
// GService 例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2837xS_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2837xS_PieVect.c 中找到
InitPieVectTable();
//配置为在全速率上运行 EMIF1 (EMIF1CLK = CPU1SYSCLK)
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EMIF1CLKDIV = 0x0;
EDIS;
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EMIF1CLKDIV = 0x0;
EDIS;
EALLOW;
//禁用访问保护(CPU_Fetch、CPU_WR/DMA_WR)
EMIF1ConfigRegs.EMIF1ACCPRT0.ALL = 0x0;
if (emif1ConfigRegs.EMIF1ACCPRT0.ALL!= 0x0)
{
ErrCount++;
}
EMIF1ConfigRegs.EMIF1ACCPRT0.ALL = 0x0;
if (emif1ConfigRegs.EMIF1ACCPRT0.ALL!= 0x0)
{
ErrCount++;
}
//提交与保护相关的配置。 直到该位保持置位
//无法更改 EMIF1ACCPROT0寄存器的内容。
EMIF1ConfigRegs.EMIF1COMMIT.ALL = 0x1;
if (emif1ConfigRegs.EMIF1COMMIT.ALL!= 0x1)
{
ErrCount++;
}
//无法更改 EMIF1ACCPROT0寄存器的内容。
EMIF1ConfigRegs.EMIF1COMMIT.ALL = 0x1;
if (emif1ConfigRegs.EMIF1COMMIT.ALL!= 0x1)
{
ErrCount++;
}
//锁定配置,以便不再更改 EMIF1COMMIT 寄存器。
EMIF1ConfigRegs.EMIF1LOCK.ALL = 0x1;
if (emif1ConfigRegs.EMIF1LOCK.ALL!= 1)
{
ErrCount++;
}
EMIF1ConfigRegs.EMIF1LOCK.ALL = 0x1;
if (emif1ConfigRegs.EMIF1LOCK.ALL!= 1)
{
ErrCount++;
}
EDIS;
//为 EMIF1配置 GPIO 引脚
setup_emif1_pinmux_async_16bit (0);
setup_emif1_pinmux_async_16bit (0);
//////////////////////////////////////////////////////////////////////////////////////////////////
uint32 i=0;
对于(i = 0;i< 0xFFFF;i++)
{
*(ExRamStart + I)= I;
}
asm (" ESTOP0");
对于(i=0;i<0xFFFF;i++){
*(开始+ I)= 0xaaaa;
}
asm (" ESTOP0");
// asm (" ESTOP0");
while (1);
}

