首页 | 培训课程 | 企业培训 | 解决方案 | 项目开发 | 产品超市 | 全国代理 | 在线订购 | 关于我们 | 联系我们 | 论坛首页
当前分类:电子综合技术
ARM2148显示实验注意要点
更新时间: 2009-6-18   来源:   点击数: 770

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);

}


 
共有评论 0 条
对不起,暂时没有内容!

最新文章
对不起,暂时没有内容!
 
最热文章
对不起,暂时没有内容!
 
深圳信盈达电子有限公司版权所有@2009 深圳市南山区南新路苏豪大厦705室 电话:0755-26457584(5线) 传真:0755-26457584-802 邮箱:edu118@126.com 信盈达www.edu118.com
ICP备案号:粤ICP备09072292 您是第159053位访客 [管理员登录]