在使用fsmc控制LCD的是时候有读写操作,如下是画一个点和读一个点
:
//画点
//x,y:坐标
//POINT_COLOR:此点的颜 {MOD}
void LCD_DrawPoint(u16 x,u16 y)
{
LCD_SetCursor(x,y); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
LCD->LCD_RAM=POINT_COLOR;
}
//读取个某点的颜 {MOD}值
//x,y:坐标
//返回值:此点的颜 {MOD}
u16 LCD_ReadPoint(u16 x,u16 y)
{
……
b=LCD_RD_DATA();
……
}
问题:fsmc是如何区分读写操作的?是通过那条语句告诉fsmc我要对LCD进行读或是写操作了?求助,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
读:var = *(uint32_t *)0x6C000080;
写:*(uint32_t *)0x6C000080 = var;
为了更明显,咱来看看生成的汇编指令:
因此,如果是读LCD,则使用的一定是LDR指令(Load Register)
写LCD,则使用的是STR指令(Store Register)
不同的指令会对应不同的总线访问时序。
下面代码是我FSMC对W5300的操作,贴出来给你借鉴!
/*******************************************************************
* 函数名: IINCHIP_READ
* 参 数: addr :寄存器地址
* 返 回: 寄存器值
* 功 能: 读出W5300 寄存器的值
*/
uint16_t IINCHIP_READ(uint32_t addr)
{
return (*((volatile uint16_t*)addr));
}
/********************************************************************
* 函数名: IINCHIP_WRITE
* 参 数: addr :寄存器地址
* writedata : 写入的数据
* 返 回: 无
* 功 能: 写W5300寄存器的值
*/
void IINCHIP_WRITE(uint32_t addr, uint16_t writedata)
{
(*((volatile uint16_t*)addr)) = writedata;
}
一周热门 更多>