各位专家:
我们应用了 EMIF1 (32位模式,异步模式)来读取和写入 FPGA。
我们将以下功能实施到一个位,以在 FPGA 上启用一个功能。
typedef struct{
....
union{ /* FSCOM0_CONTROL_UN */
UINT32 Word_u32; /* UINT32 Access */
struct{ /* Bit Access */
UINT32 COM_EN : 1; /* BIT0 */
UINT32 ERROUT_EN : 1; /* BIT1 */
UINT32 Reserved : 7;
UINT32 ERROR_EXTERNAL : 1; /* BIT9 */
UINT32 ERROR_HSCOM : 1; /* BIT10 */
UINT32 ERROR_INTERNAL : 1; /* BIT11 */
UINT32 Reserved2 : 20;
}BIT_ST;
}FSCOM0_CONTROL_UN;
.....
}AX7_FSCOM0_ST;
volatile AX7_FSCOM0_ST AX7_fscom0_stg;
void AX7_Com0SetUnitEnable( void ){
AX7_fscom0_stg.FSCOM0_CONTROL_UN.BIT_ST.COM_EN = 1UL;
}
void AX7_Com0SetUnitEnable2( void ){
AX7_fscom0_stg.FSCOM0_CONTROL_UN.Word_u32 = 0x1UL;
}
但是 AX7_Com0SetUnitEnable()无法正常工作。
(AX7_Com0SetUnitEnable2()工作正常)。
我们将这些功能分解并置于下面。
TEXT Section .text:AX7_Com0SetUnitEnable (Little Endian), 0x6 words at 0x00000000 00000000 AX7_Com0SetUnitEnable: 00000000 0201 MOVB ACC, #1 00000001 761f MOVW DP, #0x1e 00000002 001e 00000003 9802 OR @0x2, AL 00000004 9903 OR @0x3, AH 00000005 0006 LRETR TEXT Section .text:AX7_Com0SetUnitEnable2 (Little Endian), 0x5 words at 0x00000000 00000000 AX7_Com0SetUnitEnable2: 00000000 0201 MOVB ACC, #1 00000001 761f MOVW DP, #0x1e 00000002 001e 00000003 1e02 MOVL @0x2, ACC 00000004 0006 LRETR
AX7_Com0SetUnitEnable()以16位两次(偶数和奇数地址)访问
和 AX7_Com0SetUnitEnable2()以 32位(偶数地址)访问。
CGT=TI-CGT-C2000_21.6.0.LTS
我们找不到 一个编译器选项来限制 EMIF1地区使用32位的 r/w 访问。
在这种情况下,我不知道为什么 CGT 生成16位访问代码。
请告诉我们如何处理此案?
此致,
Hidehiko