硬汉嵌入式论坛

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

[emWin] RA8870 STemWin5.26 f405

[复制链接]

3

主题

20

回帖

3

积分

新手上路

积分
3
发表于 2015-4-15 11:16:14 | 显示全部楼层 |阅读模式
调试ra8870一星期了,调试时一直卡在emWin_LCD_Init里LCD_FillRect里的_FillRect,在执行BTE使能命令(0x50-0x80)时进入hardfalut(此时屏幕白屏)
,用自带的驱动可显示窗口文字,fsmc配置无数次无果
http://pan.baidu.com/s/1fgh90
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 11:17:41 | 显示全部楼层
用的

void LCD_X_Config(void)
{
    GUI_DEVICE *pDevice;
    CONFIG_FLEXCOLOR Config = {0};
    GUI_PORT_API PortAPI = {0};
    //
    // Set display driver and color conversion
    //
    pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
    //
    // Display driver configuration, required for Lin-driver
    //
    LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
    LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
    //
    // Orientation
    //
//    Config.FirstCOM = 0;//lsz
//    Config.FirstSEG = 0;  //lsz
    Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
//    Config.NumDummyReads=2;
    GUIDRV_FlexColor_Config(pDevice, &Config);
    //
    // Set controller and operation mode
    //
        PortAPI.pfWrite16_A0  =LcdWriteReg;
        PortAPI.pfWrite16_A1  =  LcdWriteData;
    PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
    PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
    GUIDRV_FlexColor_SetFunc(pDevice, &amportAPI, GUIDRV_FLEXCOLOR_F66721, GUIDRV_FLEXCOLOR_M16C0B16);
}
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 11:18:30 | 显示全部楼层
void LcdWriteReg(U16 Data)
{

    LCD_REG_ADDRESS = Data; //lsz 0325
    // ... TBD by user
}

/********************************************************************
*
*       LcdWriteData
*
* Function description:
*   Writes a value to a display register
*/
void LcdWriteData(U16 Data)
{
    LCD_DATA_ADDRESS = Data; //lsz 0325
    // ... TBD by user
}

/********************************************************************
*
*       LcdWriteDataMultiple
*
* Function description:
*   Writes multiple values to a display register.
*/
void LcdWriteDataMultiple(U16 *pData, int NumItems)
{
    while (NumItems--)
    {
        LCD_DATA_ADDRESS = *pData++; //lsz

        // ... TBD by user
    }
}

/********************************************************************
*
*       LcdReadDataMultiple
*
* Function description:
*   Reads multiple values from a display register.
*/
void LcdReadDataMultiple(U16 *pData, int NumItems)
{
    while (NumItems--)
    {
        *pData++ = LCD_DATA_ADDRESS; //lsz
        // ... TBD by user
    }
}



u16 LcdReadData(void)
{

    u16 Data;
    //GPIO_ResetBits(GPIOD,GPIO_Pin_7);
    Data = LCD_DATA_ADDRESS; //lsz
    return(Data);

}

u16 LcdReadReg()
{
    u16 Data;
    // GPIO_ResetBits(GPIOD,GPIO_Pin_7);
    Data = LCD_REG_ADDRESS;
    return(Data);
}
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 11:21:34 | 显示全部楼层
void LCD_FSMC_Init(void)
    {

        
//   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
//        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;        
//        FSMC_NORSRAMStructInit(&FSMC_NORSRAMInitStructure);
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef  p;
        
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;

        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //

    p.FSMC_AddressSetupTime = 5;     
    p.FSMC_AddressHoldTime = 0;     
    p.FSMC_DataSetupTime =5;            
    p.FSMC_BusTurnAroundDuration = 5;
    p.FSMC_CLKDivision = 0;
    p.FSMC_DataLatency = 0;
    p.FSMC_AccessMode = FSMC_AccessMode_A;     


//    p.FSMC_AddressSetupTime = 4;        
//    p.FSMC_AddressHoldTime = 0x00;   
//    p.FSMC_DataSetupTime = 8;         
//    p.FSMC_BusTurnAroundDuration = 1;
//    p.FSMC_CLKDivision = 0x00;
//    p.FSMC_DataLatency = 0x00;
//    p.FSMC_AccessMode = FSMC_AccessMode_A;


    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR ;
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
   
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
   
    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  //

}
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 11:24:08 | 显示全部楼层
void RA8870_PLL_ini(void)
{
    LcdWriteReg(0x88); //lsz 针对不同的CPU更改
//    Delaynms(1);
    LcdWriteData(0x06);
    Delaynms(2); //After REG[88h] or REG[89h] is programmed, a lock time (< 30us) must be kept to guarantee the stability of the PLL output. After the lock time period, a software reset must be asserted and user must re-program the RA8870 to complete the procedure
    LcdWriteReg(0x89);
    LcdWriteData(0x03);
    Delaynms(2); //After REG[88h] or REG[89h] is programmed, a lock time (< 30us) must be kept to guarantee the stability of the PLL output. After the lock time period, a software reset must be asserted and user must re-program the RA8870 to complete the procedure
    LcdWriteReg(0x01);  //在死锁时间过后,用户必须产生一个软件Reset以完成PLL频率改变的程序
    LcdWriteData(0x01);
    LcdWriteData(0x00);
    Delaynms(2);

}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2015-4-15 11:57:04 | 显示全部楼层
怎么不用我们开发的在emWin下的通用驱动方案,很好用。官网的这种驱动一直没有用过。
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 12:36:16 | 显示全部楼层
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-15 12:44:38 | 显示全部楼层
他说的有些小问题,也嫌麻烦吧
回复

使用道具 举报

3

主题

20

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2015-4-17 09:44:04 | 显示全部楼层
PortAPI.pfWrite16_A0  =LcdWriteReg;
        PortAPI.pfWrite16_A1  =  LcdWriteData;
    PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
    PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
这块函数补全就好了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2015-4-17 09:51:06 | 显示全部楼层

回 sirbai008 的帖子

sirbai008:       &#160ortAPI.pfWrite16_A0  =LcdWriteReg;
       &#160ortAPI.pfWrite16_A1  =  LcdWriteData;
   &#160ortAPI.pfWriteM16_A1 = LcdWriteDat .. (2015-04-17 09:44) 
[s:150][s:151]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-14 06:04 , Processed in 0.044230 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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