ST7920主控的液晶支持SPI通讯。利用面包板连接DSP与液晶,主要管脚的连接如下所示:
F2812 液晶
E(SCLK) SPICLK
RW(SID) SPIMOSI
RS(CS) SPISTE
另外,很重要的一点,液晶的PSB管脚必须连接GND,才能使液晶工作在SPI模式。SPI模式中的液晶只能接受数据,无法发送数据,故没有办法像并口控制那样依靠判断CF来确定指令的执行情况,故必须保证指令执行的时间必须充足。
然后初始化F2812的SPI模块。
void InitSpia(void)
{
// Initialize SPI-A:
SpiaRegs.SPICCR.bit.SPISWRESET = 0; // Reset SPI module
SpiaRegs.SPICCR.all = 0x07; // Reset on, rising edge, 8-bit char
SpiaRegs.SPICTL.all = 0x0E; // Enable master mode, phase (with delay), enable talk,
// and SPI int enabled
SpiaRegs.SPIBRR = 35; //
SpiaRegs.SPISTS.all = 0x00;
SpiaRegs.SPIPRI.all = 0x10; // Free
SpiaRegs.SPICCR.all = 0x87; // Enable SPI
}
按照液晶模块要求的SPI数据格式写指令或数据,根据时序图和我的实验,液晶模块应该是上升沿保存数据。“從一個完整的串列傳輸流程來看,一開始先傳輸啟始位元組,它需先接收到五個連續的〝1〞(同步位元字串)在啟始位元組,此時傳輸計數將被重置並且串列傳輸將被同步,再跟隨的兩個位元字串分別指定傳輸方向位元(RW)及暫存器選擇位元(RS),最後第八的位元則為〝0〞。在接收到同步位元及RW和RS資料的啟始位元組後,每㆒個八位元的指令將被分為兩個位元組接收到:較高4位元(DB7~DB4)的指令資料將會被放在第一個位元組的LSB部分,而較低4位元(DB3~DB0)的指令資料則會被放在第二個位元組的LSB部分,至於相關的另四位元則都為0。”
由于ST7920的指令执行周期较长,利用SPI中断方式发送数据,并不能提高数据传输效率,采用延时的方式,暂时实现对液晶的操作。 初始化代码如下: