SuperARM显示实验注意要点

有客户在做SuperARM显示实验遇到了这样的问题,就是在数码管和LCD同时显示时,很容易出现显示错乱。为此我们特别为客户编写了“综合实验3“,以显示我们的产品没有任何问题。同时我们也针对此现象作如下解释:

数码管和LCD的数据传输都是用的芯片的SSP1功能,其中P0.22(CS0)用于片选连接LCD数据口的74HC595P0.24(CS1)用于片选连接LCD数据口的74HC595。他们共同调用函数:void  InitializeSSP(void)int8u  SSP_SendData(int32u SPI_CS,int8u data)完成SSP得初始化和数据传送。

有一点书要注意,完成一次刷屏,需要多次调用SSP_SendData( ),这样就有可能发生这样的情况,正在执行刷屏调用SSP_SendData( ),此函数执行到中途,此时发生了任务切换,然后跳入数码管调用SSP_SendData( ),这事就可能会出

现显示错乱。

要解决这样的问题有多种方法,现边说两种简单的。

1.建立一个互斥信号量,用于控制程序对函数SSP_SendData( )的访问,只要有函数调用SSP_SendData( ),互斥信号量就标记为不可用。防止重入。

2.采用临介区代码的方法:在进入SSP_SendData( )函数时,关中断,退出时开中断。具体代码如下:

/******************************************************************************

函数名称:SSP_SendData()

函数功能:SSP接口向SPI总线发送数据。

入口参数:data        待发送的数据

出口参数:返回值为读取的数据

*****************************************************************************/

int8u  SSP_SendData(int32u SPI_CS,int8u data)

{  

int16u temp;

OS_ENTER_CRITICAL();         //关中断

Set_Output(SPI_CS,0);         // 片选SPI   

    SSPDR = data;

    while( (SSPSR & 0x01) == 0 );     // 等待TFE置位,即发送FIFO

    while( (SSPSR & 0x04) == 0 );     // 等待TFE置位,即发送FIFO空 

    temp = SSPDR;        

Output(SPI_CS,1);  

OS_EXIT_CRITICAL();         //开中断    

    return(temp);

}

2009年06月17日

SuperARM显示实验注意要点

更新时间:

当前分类:

269209755

来源:                   点击数:

  • 评论列表
  • 发表评论

用户评论

共有评论 0 条

对不起,暂时没有内容!

本网站由阿里云提供云计算及安全服务 Powered by CloudDream