McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5851|回复: 0
打印 上一主题 下一主题

McBSP时钟、同步、数据线不正常

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 5 K; ^9 C- U" w. P% J% a
/*
% \! |3 m* ^1 Q. q * Copyright (C) 2009 Texas Instruments Inc7 ~: \, V# ]8 h  \- s5 f
*# {/ R) P7 [2 o2 \% D0 |4 J
* This program is free software; you can redistribute it and/or modify
& H* E% v% f3 ]7 K * it under the terms of the GNU General Public License as published by- u( n; t- s+ c
* the Free Software Foundation; either version 2 of the License, or: U6 r7 `2 _9 o1 X1 ]6 E' N3 O+ ^
* (at your option)any later version.- T) b* w8 o" _5 S7 H" z. \
*9 s/ c3 r$ a" s! |; N! G
* This program is distributed in the hope that it will be useful,
$ Q. f$ j& S8 [: u! ] * but WITHOUT ANY WARRANTY; without even the implied warranty of4 w" m/ C- _& z! g/ W( O& W
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
( X9 y, v' J5 a0 y * GNU General Public License for more details.0 }# c6 |1 G2 c: Z- @; ?, s
*& _8 r7 |: y& K2 G
* You should have received a copy of the GNU General Public License
" Q) r) y* ^4 C- A, S+ _: _" D * along with this program; if not, write to the Free Software
" a2 ~9 m# M0 C- t * Foundati
9 Q9 l; s3 }* \# p4 d$ b6 |# i1 m*/, u' O! R# @; G
#include <linux/module.h>
$ U  V; X8 n- j8 ?4 L#include <linux/init.h>
8 `: i4 H$ W$ v$ A1 h#include <linux/errno.h>$ A. ^/ K8 v/ m+ F
#include <linux/types.h>
5 o) a3 M+ M" e* \#include <linux/interrupt.h>5 |6 o  y6 L& Z1 ~; V
#include <linux/io.h>
9 [" j* {6 {" h, I) L" r" u( M#include <linux/sysctl.h>- }7 a0 ^, ~5 |5 l
#include <linux/mm.h>
9 x; {0 \; \- L% H$ O#include <linux/delay.h>7 P) ^9 b' T/ @5 ~7 n' h! X& Q
#include<linux/kernel.h>
5 v* v! S; P2 N2 f# ?#include<linux/fs.h>/ x0 n7 r- \! {, w" _8 k' _4 g
#include<linux/ioctl.h>
$ q$ ^: C: Y) C#include<linux/cdev.h>
5 G9 K' b1 P+ K3 b#include<linux/kdev_t.h>
) h) ~# H( u/ a#include<linux/gpio.h>( d- G2 N' v/ ?$ C
#include <mach/hardware.h>
( C  f$ U8 c) `#include <mach/irqs.h>- {) k1 [4 y4 J' x. e" H! T

& ^% @0 S* w0 N" ~9 }) k8 ]7 R#include <asm/mach-types.h>, W1 \5 [  z* I* C7 @& L- |3 T5 I
#include <asm/mach/arch.h>
  o4 }/ {% a+ f( c#include <mach/da8xx.h>
( ?6 P( x" \8 u. r#define  SYSCFG_BASE   0x01c14000& X- y/ Q( p6 e, N
#define  PINMUX1_OFFSET   0x124
' M: L! O( e3 A( b  I#define  PINMUX18_OFFSET  0x168
3 j5 l4 h; v$ g9 K2 B% ^1 p" y#define  PINMUX19_OFFSET  0x16c8 I( h& L. n) E- O0 A, r6 G- a
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR' J) z6 R) i/ g7 s0 E  k2 @# h" J
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR3 v2 a. H( E( a* l! g& j
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR6 y, g( m8 S8 H$ p( J) ~
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
4 e5 A* d* g  k6 q8 U#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
0 @. X0 Y( r& N: w' U; N4 ^$ W                            ' C" a, L, K5 w: w, p$ m
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
: R6 n) b$ u& z8 X#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
# T/ {) H; }1 `2 u! `+ S( {//PSC
+ `9 [1 A9 Z( B#define  PTCMD_ADDR   0x01E27120  4 {, {. V0 s. \1 T. F, }
#define  MDCTL15_ADDR 0x01E27A3C
2 L+ i6 t) v. P( L8 d% D% [#define  PDCTL1_ADDR  0x01E27304' `; _" v- f& f; I, P6 y5 l
//GPIO8 direction
$ x1 o. g# t4 {. U#define GPIO8_DIRECT  0x01E260B0
( I+ F4 T7 t5 [#define GPIO8_OUT     0x01E260B4
; Z+ a* p5 Q: b#define GPIO8_IN     0x01E260C0, F: k( S+ @. t7 X0 d% z& W

7 ~! M( q+ c2 w( o/ M$ z" T; U# z3 L//#define MCBSP1_RINT    99              
; d' u# T0 f: U//#define MCBSP1_XINT    100  
8 ~, f, T5 A- z$ v5 ]" Y- O7 Xstatic int MCBSP_MAJOR=239;+ f' ~7 F( P1 a
static int MCBSP_MINOR=0;: w" |5 ^8 d" E% j- |- q0 f; e
static int count =1;1 U3 S8 a3 i- B" r# P5 e! o

1 ?; I) l* h$ n#define MCBSP_NAME  "MCBSP-device"
' ~& T: o4 b% K4 [6 [/ T3 F/ a1 ~+ k6 c8 x
static struct cdev *mcbsp_cdev;- A9 ?; C! l4 e
static struct class *mcbsp_class;1 D3 x, J0 l: k% N" O" ?) i1 {
static dev_t mcbsp_dev;
) u! y+ v( X# f7 z  U3 y3 L% nunsigned int DRR_data;
  p, w5 H. C) X$ O3 ~$ xunsigned int DXR_data;5 W5 U1 p+ k! s3 Z- e8 ]" z) G
static int mcbsp_open(struct inode *inode,struct file *file)' r1 C1 L2 W% h" v
{
% U1 `7 v4 y1 m* x/ Q- z   
' }; b: ?$ }) \- |   //interrupt enable,initialized6 v& e. X* ]2 l" N; Z+ {
   unsigned int temp;
7 x  c1 ?5 h6 \+ s; M   //SLEEP_EN(GPIO8[10])---0
' R$ E0 I' s4 h5 H" A   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));) [6 g  V, t4 B
   temp=temp&(~0x00000400);
/ j9 u  T7 w# C   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10], d. c+ c) ?% d; i* ~% J6 {# v
  //RESETn(GPIO8[8])----0----11 O! ~- s! y' Q, w. d
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));3 C& p5 U5 d$ g: ]2 p% |( D
   temp=temp&(~0x00000100);2 Q9 ~! r* A9 {2 L1 g# ]5 q
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
( i: y$ m( E$ W  s% f   udelay(100);
; {' @4 |6 M7 P- X& c3 ?   temp=temp| 0x00000100;
6 Y! b2 O( ]) n9 X6 I3 \+ X: l   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
. i7 l0 z  n- w   udelay(100);+ W- {, E& t- k
   printk("open success!\n");
. H, m# U! s5 G+ ?" G* m, c- Z   return 0;
$ Y  F" Z# b" o& L& ]8 N% Y}
3 H. {' N3 o# ]5 F; l' m1 Q: V: @) ~: _
static int mcbsp_release(struct inode *inode,struct file *file)4 ^# `7 e) o/ S
{
5 [" x( D# c/ z8 K   printk("release success!\n");
/ e/ d# g8 l/ d$ z7 w   return 0;
9 ]4 ~6 k8 N) v8 f! C+ U8 d}3 j+ H3 T: n+ a; l6 u3 ^4 y7 ?

- X) s" |+ q# F$ b1 b8 W) y' mstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
, L8 ]3 C$ `$ t" t& j8 r{/ V7 y8 m2 N7 U! e# W" E
    copy_from_user(&DXR_data,buf,len);- p) s$ E' p2 {" }$ O
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
9 D) |# b4 ^( `! m" m, Z    return 0;( t- h; ?) ^" l- s; b6 {
- q; ?0 X6 z4 G- B) h8 V
}
8 m4 E1 f8 P$ I' O" ]! n0 z3 B  `6 R$ \& ?. K8 B2 R# f
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
& C" d% n9 x- x1 D/ t{
" F& H* a3 A* [2 o3 S   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
7 @6 M( H5 y& l% T% ?( X2 U& `   copy_to_user(buf,&DRR_data,len);
  s6 j4 w: C+ X$ q& Z   return 0;
4 N6 X4 u' Z+ q0 N$ H: _}$ R* b) c9 r9 o% I- h+ r" y# f

. l" a9 A* h$ z& p8 [  b$ d  m6 n8 e
static struct  file_operations mcbsp_fops=* g* `0 v, s+ y' ^; B
{- ?+ F5 H( H: W4 y
   .owner=THIS_MODULE,1 O8 C" n+ e  G. B
   .open=mcbsp_open,, n2 W' E- s1 ~
   .release=mcbsp_release,! z, \: g1 e  s  {/ [. O( o
   .write=mcbsp_write,- M& l* p5 D: I
   .read=mcbsp_read,  p( O+ F' I+ n6 l
};8 h! f! Q8 a* S
static int __init MCBSP_init(void)
2 G* k& g3 L4 F{/ k* I& E: H1 T3 w  J
   int ret;1 ?3 H. \/ e9 v' W) M- H
   unsigned  int   PINMUX1_REG_old;
8 {' E% g( T- P0 _: v5 w   unsigned  int   PINMUX18_REG_old;( n- x6 F% R6 Z5 D4 _
   unsigned  int   PINMUX19_REG_old;
, v( _  A$ J3 E* Q; _6 ^   unsigned  int   temp;  # Z, \8 Q; O: c+ e2 Z3 ]
   if(MCBSP_MAJOR)
( M# U. H: a1 V% z* V   {% _- B4 N% L# V5 g* C+ h8 X! ?7 D
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
. ^! {* d+ {  {  p      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
* q; S. n! R/ ?1 {. `4 X1 J. c- ^   }
* K5 U* [0 ~) M, J   else
7 i( Z' m: n5 U# i/ j2 F   {
) q- M/ ^* _8 n2 w3 L      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
6 F8 ~4 d/ n$ A3 y# d      MCBSP_MAJOR=MAJOR(mcbsp_dev);- Q6 D% u- Z+ m+ t. v
   }
9 |" C5 ?7 X. f5 w   * w, j: E, b) J3 }0 l+ G
   if(ret<0)
, m5 k) \7 e: ~+ ^! F$ A2 Z   {
/ E9 u3 {, y& N; L1 i6 ~: c, r3 T      printk(KERN_ERR "register chrdev fail!");
: G3 A/ S" a2 S      return -1;
" {/ Q8 q# d* m& [   }
& M: m* B# J& n# |   * m/ {# V+ n9 i0 d) b) Y" M
   mcbsp_cdev=cdev_alloc();- L; C  [; W% c1 q- w8 K
   
2 X" Q- @/ P( P( e$ p/ u   if(mcbsp_cdev!=NULL)
4 ?$ T: f9 z/ f5 w   {
# N* p& r! d' o2 W" t2 ?5 B      cdev_init(mcbsp_cdev,&mcbsp_fops);" F. ~4 d# R% K
      mcbsp_cdev->ops=&mcbsp_fops;
& a% l; Z: A& r) w      mcbsp_cdev->owner=THIS_MODULE;
; g6 H$ e4 }, {* r      
$ [- a; }7 y4 w      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))+ F8 z. A2 K' q# z3 |5 g
          printk(KERN_ERR "register cdev fail!");; M7 |# r! y; C
      else
" g( Z* f2 T6 r3 O( A          printk(KERN_ERR "register success!\n");
' ?  K! Y6 G( J* x- f4 O) j   }- W3 f5 g7 d6 |; ~
   else
; U) ]: N+ ]& P- u! M# a   {
& F. D2 w- [+ R4 n% b      printk(KERN_ERR "register cdev err!");8 q7 }. y: _. k4 p% [0 L3 d& j
      return -1;
* u8 e2 R8 a2 E$ R   }
" b8 F, B4 o1 J1 |   1 p! g8 \9 U* p4 C6 d- U
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
+ m! T2 W7 d, s   if(IS_ERR(mcbsp_class))$ j1 `$ C; p# |8 x
   {
: ~0 |: u7 W! ?      printk(KERN_ERR "register class err!");$ c1 X: `+ `9 s5 n6 b7 D: R
   return -1;3 _3 k) ~( {& l. c; G: S$ {
   }" {& e* w5 s% A6 g  D& n  C5 q
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
% p) z) X2 R6 b* b: }4 h9 `; I7 n* N' _' @" E) d8 X0 o
   //PSC
. v2 O# {" |) z! T; `) n   //add Enable MCBSP8 J6 j7 H7 f9 t+ m: m/ {
   //test- K, K7 n; h$ c! q' H2 w6 O0 ~; I
   temp = 0x80000003;0 Z% J, C& }, R3 ~, \
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));7 s6 |: t: D7 S  [% ^
   temp = 0x00000003;
$ _' E. m% ^& q  R1 c* G   writel(temp, IO_ADDRESS(PTCMD_ADDR));( E2 V; o" O* i' E5 i/ E

/ R" K  h$ ]3 B) I( M/ [   temp = 0x001FF201;! t4 k8 f7 ]# d. F9 i
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
. {! S0 ?0 X2 b0 r& o   
/ Q: T+ L$ }- f1 c   //PINMUX  
. O3 v& b8 {" g( A) n4 n* N: I( }   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
9 f8 U- b+ Y6 M1 g   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
- @8 }$ z- K% }+ K  |1 t   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   . c3 i, `+ X" {- _4 ~: N$ H8 y3 `
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);4 Y3 R7 e" R0 c. V) z9 ]+ u' G
   4 |4 u5 ^5 }" R
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
/ x* N( b* z8 O& Y   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
( Z' Q, k9 M8 x4 H   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
) B' b* Q! l1 q! ^3 F) P8 f   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);& S% Z& j) x, h  Q5 @
  l" Z5 n% P# z# K
   //RESETn,L138_SHK2
5 B$ I1 f: m8 j4 h. H0 k& y   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ) d& D- y, L" N+ j) \$ [- B6 v
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   : j) m4 g, ~$ K
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
* \& H( j5 q" l 6 |+ t- l% y6 P

- D3 K# y+ g% m/ \! j  //SPCR Register
' L/ G* i+ V; @) e  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset% g3 @2 e! r( N+ c! W
  temp = 0x03000000;//(DLB=0)/ z  K/ q3 E' F4 T5 }
// temp = 0x03008000;//(DLB=1). [) h0 S, ^+ {& V5 {. J% V0 ]% y
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset  t/ I; Y3 z( S) x
  temp = readl(IO_ADDRESS(SPCR_ADDR));
. l- O1 E2 t$ b" Q. [. L  ]  printk("temp=%x\n",temp);/ _5 P+ P3 g( O

( i$ a7 r- h, l  Z! v   //PCR Register3 [. D1 n3 B5 i+ B2 F/ Q0 s% q) l9 M
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
2 }. }3 r4 @4 N0 o0 a1 Q  // temp = 0x00000F0F;( x9 X; b- ?* H8 P& w. F
  temp = 0x00000B0F;: k6 {/ u, }. o6 }7 D( t
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
# Z$ {5 }( c5 d- u% y  temp = readl(IO_ADDRESS(PCR_ADDR));
; f9 O# C+ W) J3 I2 n$ k; Z  printk("temp=%x\n",temp);  2 F2 l, q+ U% w
   //SRGR Register$ g8 u1 m( p9 e& m  n
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11+ ~% m8 o# _8 T: `/ r
//temp = 0x301F000B;
+ z- B8 {* W$ Q# I( ~8 T   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
' W" L; j6 f' ^$ l! p  temp = readl(IO_ADDRESS(SRGR_ADDR));+ Q# g5 X  H2 ]/ n
  printk("temp=%x\n",temp);
" N* [/ b8 h, |' _( E4 Y# d. T   //RCR+ j3 k9 Q- Z& M. v
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
: h' d: u1 ^! L; V1 h   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0- E% V" U% \, t9 H8 D+ g
   temp = 0x00440040;
: g( }6 y  u( }1 s$ Z   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   " L  o5 \* _" L  K2 J* \
   temp = readl(IO_ADDRESS(RCR_ADDR));
3 ^' e5 m- r6 z; h" z   printk("temp=%x\n",temp);
: s8 n$ d; F( K7 _6 K   //XCR! P8 f! @/ f5 B+ A; J5 }4 k
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
9 M! I+ \. z  U$ O  H& O   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
8 S( ?* y8 z, h$ a* Y& ~9 V  w   temp = 0x00440040;  d# W* e) s" y4 ]! S4 x
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
# H/ `* ~- Y( J4 A) I   temp = readl(IO_ADDRESS(XCR_ADDR));$ r( `$ ^" l6 r: |: U
   printk("temp=%x\n",temp);7 T% Z7 H, c# G# j3 c. N0 ^
  udelay(100);
+ n+ ?5 q; {" I$ u5 M5 }: v% f4 q5 ?  //SPCR Register/ J, T6 O" d! L; Y* T. U
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
5 ^5 {& d% \0 w  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
/ y; e+ Y$ [7 a/ h  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
' K( ^' ~" v6 F8 A- n) ]  temp = readl(IO_ADDRESS(SPCR_ADDR));
! N: y# e5 t) Q( B( Q  printk("temp=%x\n",temp);
$ w, a# S; k  M' W; V  udelay(100);
% A1 w( B0 K% U+ q  {) y' T+ Y9 r' v! U. a- {
  //set GPIO direction$ [* A6 h- ?8 Z0 m6 y4 Y
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
" z. x/ t9 J7 R) T# p   temp = temp | 0x00000100;//EPR----input1 J( D  q' @4 }' h7 b
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output; |- R2 B5 r9 k7 g
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); % w! k8 B  Z3 f' a7 M
5 G% A, I, ?7 x% s
   return 0;
7 M) [4 Q" Q$ {  ?}! C: D0 [, [$ D1 y
static void __exit MCBSP_exit(void)8 s# \, F, k$ J
{- O" \6 n+ D' P) K
   printk("mcbsp chrdev exit!\n");
. I- ^5 b; K. w, }" f   cdev_del(mcbsp_cdev);: z- s$ N  N/ g4 o& H( ^
   unregister_chrdev_region(mcbsp_dev,count);
* J2 c* W* b* L6 c1 l4 o3 R7 c   device_destroy(mcbsp_class,mcbsp_dev);5 j1 N2 T4 Q/ o: `, D
   class_destroy(mcbsp_class);) O8 w; e- y' I6 a- I3 C( M2 z
}
1 ~* L) c; V" B" @; vmodule_init(MCBSP_init);
9 N6 e. _5 S8 j3 j6 a% {module_exit(MCBSP_exit);1 T" Y; \" t* W# q3 g$ H: v/ I
) o) y$ m& q$ O$ _7 C: b
MODULE_LICENSE("GPL");
5 l( P1 b4 W& h+ E4 ]! Z' s' k
% ]# p% M  b2 {* k我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
) v$ r7 D  P1 o5 m7 A, `# K我的应用层的测试程序如下
$ k9 }$ K2 E2 \( \2 v) s5 }. o9 z#include <stdio.h>
( |# u5 p$ p$ f# [$ _#include <string.h>. `1 {) T4 Q1 L5 K
#include <fcntl.h>  s  f# {  u8 C
#include <unistd.h>
6 l3 e! T: j6 H#include <signal.h>! W+ v: L+ \( K) ]) I' }4 r
#include <pthread.h>       //线程( }( `0 `% c% B1 n5 A! t, d( N
#include <stdlib.h>& s2 ?! T4 e6 ^" z9 l: C3 z4 g- f
#include <pcap.h>          //捕获网口数据
: @; [. D0 N6 V$ ?" I: ^#include <semaphore.h>     //信号
3 M% m* E: K% M#include <sys/types.h>     //消息对列8 o0 C$ ~3 O" d" c# o% V; Z
#include <sys/ipc.h>       //消息队列
2 O+ m/ z+ T# [! I#include <sys/msg.h>       //消息队列( j4 N" S8 f* M" x' c
#include <sys/select.h>
6 Y9 r6 ?  K. Q# k#include <sys/syscall.h>. T; @5 @- j# ?+ ~# d6 q
#include <sys/stat.h>' O  n1 P8 F6 L+ |* z( {
#include <sys/mman.h>
! ^* J& g' |) U#define msleep(x) usleep(1000*x)- i, H7 E# o, E6 k" a2 q! g3 u
. o6 L! {* [6 _
int main()
) T( ?3 }$ q  w- S{
- X) b( I- Y2 K    //MCBSP,ARM与AMBE2000交互设备2 ], W) [6 i" T3 G% O
int fd;
- p) h: k7 T& p) k4 J3 L unsigned short data_write = 0x5555;& l$ \+ T/ E8 V( ~9 a& Q
unsigned short data_read = 0x00;& y6 v) D0 ?4 I) j/ o2 c
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);9 \  S, Z/ g" X7 B+ c  W
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
6 d5 W( Y1 f$ c   
4 ?9 ^" \  d  C% g7 F  O) Q  if(fd < 0)7 q6 R5 l& S% e9 ~2 K( }
  {
' F6 w6 w) e1 S; J" a4 S# e     perror("open failed\n");
. [' i& Z$ d. p; [( O  D( e     return -1;
  ~$ m' @$ k4 C  }, Y3 m' x  [5 K( T# Y! y! ]
  
0 W2 |* J# S9 E+ Q  while(1); R* T) S8 U# |+ X. e6 i, ]% v
  {
# n8 f! Z7 C! o! M; t- B8 Q$ _   - `* U* ?0 M2 @+ ]9 x- ^# @
   //AMBE2000每次读写是24个字为一帧
6 M$ r+ C1 S' X- S   //写数据时将数据在底层存储起来,等到中断的时候再发送
+ s4 }# [% _8 r1 ?   //AMBE2000输入数据是以0x13EC开头的0 E4 o/ _% u" i* c
   write(fd,&data_write,sizeof(unsigned short));" K; J* H; X7 V% b) k
   
$ G: c( T6 J& O. l; X6 Z* a% ?  T   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
% |- b0 l9 M2 ?, j   read(fd,&data_read,sizeof(unsigned short));
! Q$ e0 d9 Y+ s, t! ~( ^   
( e* k; Y3 X5 f& o   if(data_read == 0x13Ec)2 k3 Q, \5 C$ M% J4 L
   {
& x9 {: `# ]' P+ c' ^4 r0 r: }7 c   9 i: r2 u7 c+ f4 W8 u3 U$ \, P
    printf("data_read = %x\n",data_read);
- B2 [2 T0 n2 I1 \! ~9 L1 r* }   }
% n7 k- c( }& Q! a9 W9 t/ v3 W  h5 Q   * P  [( i6 ~# _
   msleep(10);' b" U& ^% n& q6 r
  - h4 R9 H& B/ S$ k. e+ x- W
  /*
$ P  d  D- s3 l' j1 s   ioctl(fd,1);   
9 v+ F* e, @0 V, i, J% K1 V- Q- m sleep(1);
( w* F+ ]+ u7 Y/ U& q$ _# K1 M0 p) U ioctl(fd,0);; Q  B+ |! u3 H. H- u) U% P
sleep(1);, t/ r5 ?  B) w8 Q3 L& p
*/ $ s+ T9 v& u% I
  }   
3 N% M) `: Y4 m& i0 J# N6 r% I return 0;  S2 R; s- G1 ]9 f
( @3 h$ d4 V- G3 w
}
! x9 a. H# a8 b1 h$ Z
, Y1 A4 E0 {  a, K7 t多谢各位指教,谢谢! 急6 ]" F* L  g' B, z+ T

: w1 |. p& }3 R8 K" Z3 {) |( |
3 o' L+ s; Y0 C: u: c& J6 L6 L- h8 T1 S9 S
# }, ^! O: c0 j$ f
' `8 M* u4 L* ~- X+ z# U2 A5 q  R3 V% D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-13 01:52 , Processed in 0.047911 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表