硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6949|回复: 3
收起左侧

[有问必答] 请教大家一个FSMC配置的问题

[复制链接]

12

主题

98

回帖

134

积分

初级会员

积分
134
发表于 2013-3-13 11:29:13 | 显示全部楼层 |阅读模式
我用的是STM32VC,里面只有一个NE1,所以只能配置成FSMC_Bank1_NORSRAM1,如下配置:
static void LCD_FSMCConfig(void)
{
    FSMC_NORSRAMInitTypeDef  init;
    FSMC_NORSRAMTimingInitTypeDef  timing;

    /*-- FSMC Configuration ------------------------------------------------------*/
    /*----------------------- SRAM Bank 4 ----------------------------------------*/
    /* FSMC_Bank1_NORSRAM4 configuration */
     timing.FSMC_AddressSetupTime = 1;
     timing.FSMC_AddressHoldTime = 0;
     timing.FSMC_DataSetupTime = 2;
     timing.FSMC_BusTurnAroundDuration = 0;
     timing.FSMC_CLKDivision = 0;
     timing.FSMC_DataLatency = 0;
     timing.FSMC_AccessMode = FSMC_AccessMode_A;


    /*
     LCD configured as follow:
        - Data/Address MUX = Disable
        - Memory Type = SRAM
        - Data Width = 16bit
        - Write Operation = Enable
        - Extended Mode = Enable
        - Asynchronous Wait = Disable
    */
    init.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
    init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
//    init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;    /* ×¢òa¾é¿aÎTÕa¸ö3éÔ± */
    init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    init.FSMC_WrapMode = FSMC_WrapMode_Disable;
    init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

    init.FSMC_ReadWriteTimingStruct = &timing;
    init.FSMC_WriteTimingStruct = &timing;

    FSMC_NORSRAMInit(&init);

    /* - BANK 3 (of NOR/SRAM Bank 1~4) is enabled */
    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
}
但是每次一运行到这一句后if (RA8875_ReadID() == 0x75),也就是一执行总线数据操作,就跳到死循环去了,如下
void HardFault_Handler(void)
{
  /* μ±ó2¼tê§D§òì3£·¢éúê±½øèëËàÑ-»· */
  while (1)
  {
  }
}
这是什么原因呢?


我的屏的硬件接法,是这样子的

47 PB10---8 INT#
48 PB11---7 WAIT#
59 PD12(A17)---80 RS
60 PD13(A18)---79 CS
85 PD4(NOE)----77 RD
86 PD5(NWE)----78 WR
也就是CS连的不是NE1,但是我看了一下论坛版主说的CS脚直接拉地也可以工作的,实际当中我用示波器测量CS脚,确实是低电平,,所以我对总线地址是配置如下:

    #define RA8875_REG        *(__IO uint16_t *)(0x60000000+ 1<<18)
    #define RA8875_RAM        *(__IO uint16_t *)(0x60000000)
这样配置有问题吗?
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2013-3-13 16:05:36 | 显示全部楼层
试试  #define RA8875_REG        *(__IO uint16_t *)(0x60000000+ (1<<18))
回复

使用道具 举报

12

主题

98

回帖

134

积分

初级会员

积分
134
 楼主| 发表于 2013-3-14 08:21:01 | 显示全部楼层

回 armfly 的帖子

armfly:试试  #define RA8875_REG        *(__IO uint16_t *)(0x60000000+ (1<<18)) (2013-03-13 16:05) 
目前就是这样子配置的呀,一运行就跳到那个中硬件出错死循环去了
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2013-3-14 10:36:23 | 显示全部楼层
我的意思是: (1<<18) 加括号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-31 21:32 , Processed in 0.234218 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表