网站导航: 首页 > 设计参考 > 正文 文章搜索
基于ARM S3C2410与TMS320C6416的接口设计[图]
 
文章编号:
081211170725
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3C2410,TMS320C6416
文章来源:
网络,作者:陈育林 张秦艳
摘 要:
以Samsung公司的ARM9系列的S3C2410和TI公司的TMS320C6416为例,详细介绍S3C2410芯片外部I/O与C6416芯片HPI口硬件连接技术和基于ARM uClinux的HPI驱动程序开发。设计结果实现了接口数据稳定快速读写,此设计方案对其他

3 HPI接口设备驱动程序软件设计
3.1 Linux设备驱动程序
    Linux设备类型分为3种:字符设备,块设备和网络设备。本设计将HPI外设归类于字符设备。在系统内部,字符设备驱动程序都提供类似文件操作的open,close,read,write,ioctl等函数人口,详见<linux/fs.h>中的fileoperations数据结构。初始化字符设备时,设备驱动程序向Linux登记,并在字符设备向量表中增加一个device_struct数据结构条目,这个设备的主设备表示符用做这个向量表的索引。HPI设备驱动程序在内核与用户空间注册注销及系统调用过程如图3所示。
HPI设备驱动程序调用过程 
3.2 HPI设备驱动程序设计
3.2.1 HPI接口设备数据结构及其文件系统接口定义
    HPI接口设备数据结构是自定义的,它完成各个不同系统调用之间的协调工作,因此在设备驱动中是全局数据结构变量。具体定义如下:

 
  1. Struct HPI_DEVICE{   
  2.     devfs_handle_t devfs; //devfs device   
  3.     char isopen; //device status:1=opened,0=closed   
  4.     int MajorID;   
  5.     kdev_t MinorID;   
  6.     U16 DriverType;   
  7.     char *HpiBaseBufRead:   
  8.     char *HpiBaseBufWrite;   
  9.     wait_queue_head_t rd_wait; //read timeouts   
  10.     struct semaphore sem; //lock to prevent concurrent reads or writes   
  11. #if defined(DMA_SUPPORT) //DMA   
  12.     DMA_CHANNEL_INFO DmaInfo[NUMBER_OF_DMA_CHANNELS];   
  13.     Spinlock_t LockDmaChannel;   
  14. #endif   
  15.     struct file_operations hpi_fops;   
  16. }   
  17.   文件系统接口定义是用户使用HPI设备的接口,合理定义设备驱动程序在内核中的源码就能简化应用程序的设计。   
  18. Static struct file_operations hpi_fops={   
  19.     owner:THIS_MODULE,   
  20.     open:hpi_open,   
  21.     read:hpi_read,   
  22.     write:hpi_write,   
  23.     ioctl:hpi_ioctl,   
  24.     mmap:hpi_mmap,   
  25.     release:hpi_release,   
  26. };  


3.2.2 读取HPI接口数据
    HPI设备驱动程序的开发大多数工作都集中在struct file_operations中接口函数的编写上,这些函数是应用程序通过内核操作硬件设备的人口函数,下面将给出对HPI接口读数据的关键代码。

 
  1. #define HPI_BASEADDR 0x08000000 //BANK 1   
  2. #define bHPI(Nb) _REG1(HPI_BASEADDR+(Nb))   
  3. #define HPIC_WRITE bHPI(0x0)   
  4. #define HPIC_READ bHPI(0x40)   
  5. #define HPIA_WRITE bHPI(0x10)   
  6. #define HPIA_READ bHPI(0x50)   
  7. #define HPID_WRITE bHPI(0x20)   
  8. #define HPID_READ bHPI(0x60)   
  9. Static ssize_t hpi_read(struct file *file,char *buf,size_t count,loff_t *oppos)   
  10. {   
  11.     Struct HPI_DEVICE *pHpiDevice;   
  12.     int i,hpi_size;   
  13.     size_t ret;   
  14.     down(&(pHpiDevice->sem));   
  15.     hpi_size=1024;   
  16.     for(i=0;i<hpi_size;i++)   
  17.     {    
  18.         HPIC_WRITE =0x00000000; //初始化HPI控制寄存器   
  19.         HPIA_WRITE =0x80000000; //初始化HPI地址寄存器,读取DSP地址为0x80000000的数据   
  20.         (__U8 *)(&pHpiDevice->HpiBaseBufRead[i])= HPID_READ;//读取1K到HpiBaseBufRead缓冲区   
  21.     }   
  22.     IBUF_SIZE =hpi_size;   
  23.     ret=copy_to_user(buf,(__U8 *)(&pHpiDevice->HpiBaseBufRead),IBUF_SIZE) ? -EFAULT:ret;   
  24.     up(&(pHpiDevice->sem));   
  25.     return IBUF_SIZE;   
  26. }   

4 结束语
    随着DSP对密集复杂数据处理能力的加强,ARM对控制和网络功能的进一步完善,基于两者的双核数据处理系统将在未来应用于更广泛的科研领域,而双核之间数据交换的快速性和稳定性也将成为双核数据处理系统开发的重点。TMS320C6416+S3C2410的软硬件设计在本实验室项目上得到初步应用,验证了理论设计的可行性,实现了接口数据稳定快速读写,对以后其他双核接口设计,尤其是驱动程序的开发有很好的指导作用与参考价值。

 
相关文章:
s3c2410 Timer工作原理[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
S3C2410 中断程序的实现
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
ARM S3C2410硬件手册重点
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
MINIGUI在S3C2410开发板的移植
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
s3c2410 LCD图片显示
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
S3c2410软件调试总结
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
基于嵌入式linux和s3c2410平台的视频采集
S3c2410 LCD驱动学习心得
s3c2410移植MPlayer到linux2.6

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4