用AiCube来硬件SPI+DMA驱动LCD12864,求救!
各位大佬早晨好,请教:在硬件SPI+DMA驱动LCD12864(主控IC采用矽创公司ST7567),参考STC论坛的DMA核心代码:
void LCD_SendData(uint8_t *dat, uint16_t len)
{
lcd_cs1= 0; //片选使能
memcpy(pu8SPIDMATxBuffer, dat, len); //将数据复制到DMA缓冲区
DMA_SPI_SetAmount(len - 1); //设置DMA发送字节数
DMA_SPI_MasterTrigger(); //触发SPI主机DMA
fSPIDMABusy = 1; //设置DMA传输忙标志
}
这里有疑问,假如长度len=1,那么 DMA_SPI_SetAmount(len - 1); //设置DMA发送字节数 就变成:
DMA_SPI_SetAmount(0); //设置DMA发送字节数
DMA是不是就不发送字节啦?但是我改成:DMA_SPI_SetAmount(len ); //设置DMA发送字节数
也没用,依旧是没波形!
void LCD_WR_CMD(uint8_t *cmd, uint16_t len)
{
while (fSPIDMABusy); //等待上一次传输完成
lcd_rs= 0; //写命令
LCD_SendData(cmd, len);
}
void LCD_WR_DAT(uint8_t *dat, uint16_t len)
{
while (fSPIDMABusy); //等待上一次传输完成
lcd_rs= 1; //写数据
LCD_SendData(dat, len);
}
接着在我的LCD程序中这样调用:
void transfer_command_lcd(u8 data1)
{
u8 cmd;
cmd = data1; //给数组赋值
LCD_WR_CMD(cmd, 1);
}
void transfer_data_lcd(u8 data1)
{
u8 dat;
dat = data1; //给数组赋值
LCD_WR_DAT(dat, 1);
}
编译,链接都OK,但屏幕没反应
软件驱动,或者硬件SPI都OK
有朋友知道是哪里的问题么?清多多指教,谢谢谢谢谢谢!
在AiCube里的设置:
逻辑分析仪:
感觉程序没有驱动I/O
我现在怀疑,使用硬件SPI-DMA实现OLED的底层驱动代码(核心代码),对应的OLED屏幕控制IC:SSD1306
而我现在这块LCD12864的屏幕,主控IC采用矽创公司ST7567,所以我直接用OLED的底层驱动代码(核心代码),是不是有问题?
实际上,我先是把这块屏,从传统8051--STC89C52RC的驱动,改写到Ai8051U 驱动,字库也能正常使用(40MHZ),接着我用STC的AiCube ,
自动生成了硬件SPI框架程序,让后把在Ai8051U 软件驱动正常的程序,嫁接到STC的AiCube ,自动生成了硬件SPI框架程序里,也是正常的
但是进一步,到了DMA就彻底不动了,请大侠指点一下...........
SPI-DMA 刷 LCD12864 程序,整屏523us,AI8051U 驱动1.44寸黑白点阵屏,超高帧频 - LCD12864,LCD1602,DMA-M6800并口自动刷屏,CPU不等待,DMA-SPI刷屏 国芯人工智能技术交流网站 - AI32位8051交流社区
初始化函数放错位置了,要先开全局中断,才能使用DMA中断
ercircle 发表于 2025-12-13 19:28
初始化函数放错位置了,要先开全局中断,才能使用DMA中断
谢谢erci*** 版主大侠,我蒙啦,确实是!
页:
[1]