主页 关于万禾 产品通道 技术支持 技术论坛 解决方案 成功案例 合作伙伴 English
 
   
  常见问题解答
  研发问题集锦
  LINUX知识集锦
  下载专区
   
以色列嵌入式产品
 
 
 
 
  在SOM5307与用户电路接口设计过程中,有何需要注意的问题
   
  一、 概述
SOM5307微处理器模块有2个84线总线扩展连接器,用于与用户电路接口,扩展SOM5307的功能,构成用户自己的应用系统。这里讲述用户系统硬件接口设计和软件设计方法。

二、 硬件接口设计

  1. 设计要点
    SOM5307微处理器模块的2个84线总线扩展连接器上的信号基本都来自Coldfire5307 CPU,主要是数据总线、地址总线、控制总线等信号,这些信号继承了Motorola M68K微处理器的特点,与M68K总线非常相似。与PC的ISA总线有相似之处,但又有所不同。设计接口电路时,最重要的是要考虑Coldfire5307 CPU各个信号的时序能够与外部接口电路的时序配合,另外要注意总线负载与隔离、中断信号的连接、不同数据宽度(8位、16位、32位)情况下应该 使用数据总线中的哪些信号线等问题。
  2. 主要信号
    地址总线:A0-A31;
    数据总线:D0-D31;
    控制信号线:CS0-CS7(片选信号)、R/-W(读写控制)、OE(读出使能)、AS(地址锁存)、TA()、BCLKO(总线时钟)等。
    所有控制信号都与BCLKO(总线时钟)同步。CS0-CS7(片选信号)用于选择要访问的外设,其中CS0、C S3已经被SOM5307模块占用,其余可以用于访问用户系统。片选信号访问的地址范围、数据总线宽度、插入的等待周期等参数都是可以通过软件编程来控制的。
  3. 时序
    要使5307CPU能够正确与用户电路接口,最重要的是5307和用户电路时序上能够正确配合。有关5307的读写时序请参考5307用户手册,最新手册在Motorola网站http://e-www.motorola.com/brdata/PDFDB/docs/MCF5307UM.pdf,有关接口和总线时序的内容在"Chapter 18 Bus Operation"这章中。当用户要扩展的器件不能直接与5307CPU接口时,需要使用EPLD、FPGA等逻辑电路对5307控制信号线进行组合,以产生正确的接口信号。
  4. 存储器接口设计示例。

三、 软件设计
这里只对用户程序设计进行说明,驱动程序设计与此类似。下面是一个程序示例。在这个例子里,假设用户使用CS5作为片选信号,插入15个等待周期,起始地址为0x50000000。首先设置CS5的3个寄存器,然后调用函数wr_cs5访问地址0x50000000.
/*Example to show how to set up CS and access the associated memory
Copyright WHN co.,ltd. lyx@wanhenet.com
*/
#define MCF_MBAR 0x10000000
#define MCFSIM_CSAR5 0xbc /* CS 5 Adress reg (r/w) */
#define MCFSIM_CSMR5 0xc0 /* CS 5 Mask reg (r/w) */
#define MCFSIM_CSCR5 0xc6 /* CS 5 Control reg (r/w) */
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>

main()
{

*((volatile unsigned short *) (MCF_MBAR + MCFSIM_CSAR5)) = 0x5000;
*((volatile unsigned short *) (MCF_MBAR + MCFSIM_CSCR5)) = 0x3d80;
*((volatile unsigned long *) (MCF_MBAR + MCFSIM_CSMR5)) = 0x00FF0001;
/*Test the port*/
wr_cs5();
exit(0);
}

int wr_cs5(void)
{
unsigned short aaa;
while(1){
*((volatile unsigned short *) (0x50000000)) = 0x0;
*((volatile unsigned short *) (0x50000000)) = 0xffff;
}
return(0);
}
/*****************************************************************************/
int read_cs5(void)
{
unsigned short aaa;
while(1){
aaa = *((volatile unsigned short *) (0x50000000)) ;
}
return(0);
}