McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: / i5 ?% D, }0 H2 z
/*
3 z- i$ ?: J' k * Copyright (C) 2009 Texas Instruments Inc
- r/ t- s1 n! h( I2 e% s5 u *
. a; |0 `( J2 ]0 o# m * This program is free software; you can redistribute it and/or modify. X- V: w/ H/ N( {
* it under the terms of the GNU General Public License as published by0 d( l5 j8 a, ?4 D8 v% v" T$ L
* the Free Software Foundation; either version 2 of the License, or5 T' G" d& m5 X
* (at your option)any later version.+ l( c& M7 H: ^& Y3 R2 W5 |
*
( S4 ]( p/ H! p1 H9 q * This program is distributed in the hope that it will be useful,
) g9 V# p4 I  H' B9 D8 c' t: K * but WITHOUT ANY WARRANTY; without even the implied warranty of; `; m( j' G% M7 p# e# A
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 `) Y3 y; `4 w' H6 n' |7 h8 z
* GNU General Public License for more details.
0 b* C5 t. z3 |+ k* H" n *) s) A% n2 M5 R) b
* You should have received a copy of the GNU General Public License
9 t9 @4 K" ?, |- |4 a * along with this program; if not, write to the Free Software6 x0 O" ^2 o$ ]- Z
* Foundati
( Y: [1 ^; N# x0 u, [*/
/ _- W9 o6 C0 H( `- ]% _% T#include <linux/module.h>8 n/ c; B9 G' ^+ \* y5 V0 r8 S
#include <linux/init.h>
; z8 K/ z% J1 v( ]#include <linux/errno.h>8 i: h) K/ h$ G$ J: Q
#include <linux/types.h>& \( N2 ?5 M( m
#include <linux/interrupt.h>' v2 {+ j8 S6 G% K
#include <linux/io.h>
9 M5 w* s5 ~- z" Z. M3 B' \#include <linux/sysctl.h># K8 p* A) s/ B' L* q) F
#include <linux/mm.h>
3 a+ `' r6 F- e9 g- e" O#include <linux/delay.h>& t5 Q! D* y4 M* X0 C
#include<linux/kernel.h>
3 X2 v# [# {5 Z. Z: ?+ S+ B#include<linux/fs.h>
7 S2 o2 Y% D7 K* A#include<linux/ioctl.h>  ?6 m/ Z+ S6 O0 l2 l6 e( P7 b% R2 m
#include<linux/cdev.h>  Z3 @/ g. _3 c% z' V
#include<linux/kdev_t.h>' e1 {" p! f/ p$ C( E8 _
#include<linux/gpio.h>
; R8 T/ _- O& c#include <mach/hardware.h>0 V3 V* \7 k' I: w! O7 L% F" Z
#include <mach/irqs.h>
: _/ ?. d7 Z8 ]. B3 r* T  V& B) l- p
#include <asm/mach-types.h>
( I" U7 \/ S4 d#include <asm/mach/arch.h>
) j' f' ]+ S1 \% Q* S- W; k#include <mach/da8xx.h>
& E- G' ~/ Y; Y8 ?#define  SYSCFG_BASE   0x01c14000. d0 g; r0 h' G. [% b' B. Y
#define  PINMUX1_OFFSET   0x124
* l- f/ k! u% x+ k0 {$ }; J#define  PINMUX18_OFFSET  0x168 & J) [9 G' D" \
#define  PINMUX19_OFFSET  0x16c
0 X9 [; T) w% |3 n4 o& q8 e* q#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR) U9 p, Y* r* _7 m$ |+ v2 l' I
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
* l  o- d% q( O* L5 T5 _: M#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
( v3 X  m: ]% s#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR8 U7 B, H  M+ e% Y5 t( I& ]3 |6 e  R
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
) w! S% ?0 X: H- d                           
$ l7 m5 t# s  y. d- R* t9 z; `/ `#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
- ]8 B8 f. k5 ~' i  ]#define DRR_ADDR      0x01D11000  //MCBSP1_DRR7 x4 ^) Y5 p- H
//PSC1 u1 @! q+ I" [0 g# p* W9 Y5 k
#define  PTCMD_ADDR   0x01E27120  
* a8 k  h8 K6 }# a#define  MDCTL15_ADDR 0x01E27A3C/ d1 n2 s, q  I3 D% `6 R
#define  PDCTL1_ADDR  0x01E27304' S9 p7 z. E' G0 Q% M
//GPIO8 direction5 t" d* N+ K' ~! X
#define GPIO8_DIRECT  0x01E260B0& M; I" N, m* \5 C( L) b
#define GPIO8_OUT     0x01E260B4" H8 V; L; d3 n3 `$ L3 K
#define GPIO8_IN     0x01E260C0
/ t  K- }( v/ t2 Z; a0 P4 J
( w' h7 t- Y& M//#define MCBSP1_RINT    99              8 q- @6 b" O" k
//#define MCBSP1_XINT    100  # T- L7 ^4 p% n0 T
static int MCBSP_MAJOR=239;
) {9 ^. S  F2 t5 X" q5 Estatic int MCBSP_MINOR=0;
0 M8 d% R1 b: w2 Q  ~8 y2 tstatic int count =1;
9 w$ y$ @/ X, U0 k
) i1 z5 m# t; Y. o#define MCBSP_NAME  "MCBSP-device") k: t; K' b& b4 L0 N$ |
, M" }! P% a* I# A* Z3 L1 R, Y; g
static struct cdev *mcbsp_cdev;
  I! ?6 [7 a) }, M& [static struct class *mcbsp_class;' ]5 y1 R, A: h- E( @
static dev_t mcbsp_dev;4 i$ R! r5 j  K7 }# q1 t
unsigned int DRR_data;
# s% y3 _% K( B" H" V+ wunsigned int DXR_data;
$ D5 ~% G; E1 F( c0 Ostatic int mcbsp_open(struct inode *inode,struct file *file)
$ a8 h  x( w% k7 ]$ i* Q9 L: G) D{
# D" a: N5 c' ]( K, O0 m   8 P  J# M* _& L
   //interrupt enable,initialized
3 [, z: S. d0 ~5 _7 Y# ^   unsigned int temp;
1 e) i* z: y1 z9 _9 ^   //SLEEP_EN(GPIO8[10])---0
4 x$ A7 e  e# P' {; F6 @   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
( b; s; `  e: ], D9 E. i" D: S1 c   temp=temp&(~0x00000400);
' E2 S" W) ^: {3 n; R9 D( u9 d   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
, Y  Y" u4 ^4 U  //RESETn(GPIO8[8])----0----10 N& {$ }) c# r( p: |
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
1 e! l7 m6 [$ l$ [/ n9 O/ X   temp=temp&(~0x00000100);, R7 w4 m' r5 Y
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0% Z; j2 G7 v1 l: d
   udelay(100);& Y1 r+ K* i3 d# K) @7 o
   temp=temp| 0x00000100;0 v6 G( R; m2 G, L1 \# q8 y, ~
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
/ `4 {' t" j  O6 A  w; @+ k   udelay(100);
( k5 d/ [6 q* s. r' c! O   printk("open success!\n");( K! M6 K8 N0 M0 _
   return 0;
1 [+ _+ ?  U! b- K- w7 Z0 s9 w}1 \# ^' q5 ]; e& R
8 H" C* P, h- t/ s; Q7 {8 V* g: R5 D
static int mcbsp_release(struct inode *inode,struct file *file)
  W5 p& m7 O* l& @- {7 s{" @+ b$ U  Y& N. a4 L/ G
   printk("release success!\n");$ q# `3 Z  X  U9 k
   return 0;/ D" a. s: Z' u, |) Y
}5 S4 }( k; z- a. j

/ H" m3 c' k: C( U" b( B% Ostatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)1 ~; v, V5 U; `: w1 H9 j1 |
{
8 f' C2 L: l' Y, C9 S% c* a6 X    copy_from_user(&DXR_data,buf,len);
6 F. [2 C! z* j. z    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       # q+ A" i3 H) v3 s5 ^/ G" [# J9 r
    return 0;
  d+ b: ?9 s1 X6 ~! b2 v; D8 ? ! e- r8 v+ _! L; T$ z
}% W" s3 I6 ~' z$ j1 m

. A$ o! }8 Y5 Z$ n: J" S9 w% y- J3 gstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)5 f0 ?* S1 h2 Y$ ]
{
8 ^' O/ `$ y( t5 R; {   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));8 R( E0 ]9 X7 h
   copy_to_user(buf,&DRR_data,len); 2 `, |4 G6 o( {6 k
   return 0;
1 F# ?! o+ G7 T; S7 Q0 y}3 ~2 y0 s. `7 j

5 f+ l1 A  E5 c! V6 M* j- F0 _
: O% o7 w- t# }+ Hstatic struct  file_operations mcbsp_fops=! ~' Z' D, _' U% R* K# p$ L7 k2 F
{) \8 V* j# n  n6 i' e
   .owner=THIS_MODULE,7 D0 e3 E) E' ^$ T
   .open=mcbsp_open,
5 P3 ]3 a: Y' v1 x1 T   .release=mcbsp_release,
" G9 L+ m! z& Y   .write=mcbsp_write,9 h4 H# q, Y2 z, S; A
   .read=mcbsp_read,& g; [. m% g' `, R) p( f! O
};' }) j0 }' V+ k- |
static int __init MCBSP_init(void)
7 K1 w* X& e! @% P/ u: D{
4 T/ A8 u- b4 s/ J+ ?- |   int ret;
- J4 X$ J' [1 a1 @& r2 k   unsigned  int   PINMUX1_REG_old;
6 {$ c9 e# H# W   unsigned  int   PINMUX18_REG_old;
2 ]+ s/ O2 B) Z7 {3 s7 w   unsigned  int   PINMUX19_REG_old;4 K: g9 L6 Y; r1 ^
   unsigned  int   temp;  
: D! n8 B! J  @, y9 ~   if(MCBSP_MAJOR)9 b" q3 c8 `8 }! b# w, t
   {
; K* e0 }+ G% z$ A      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);+ B& W1 x: A' J  K& P4 [7 Q
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
7 f% R2 N( `7 N' L5 G  q   }
0 `/ `8 r& U! v7 V0 V$ k: ^. Q5 G: t! F   else  z! W! X" m: y. X
   {3 P# l  r7 I4 i2 y) S+ U7 L
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);7 ^6 N; m. m2 k' d; `4 ?0 m
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
; k: Y" ?6 B2 v7 w   }
: S7 R) [0 n- ?5 R5 x# B   0 G2 z  z0 |! w% r. t  w$ H
   if(ret<0)
& j/ E; ^3 S/ P( v! u   {
; l# j; A; }9 \6 d+ b      printk(KERN_ERR "register chrdev fail!");
6 O; l+ V) _9 f2 I% t+ n, d8 B      return -1;, x8 q$ Z! m7 {: ^) a6 _$ k. m9 }
   }; A, @; D4 f7 Z( ~0 U& C
   
" ?+ j- D$ I1 x   mcbsp_cdev=cdev_alloc();% C4 _/ m: V5 o) ^: n
   
' f' n. e4 J6 F+ f6 z   if(mcbsp_cdev!=NULL)
: e1 p4 Q0 [. S$ }2 V   {# W& \# Z2 d- z( _* r' v
      cdev_init(mcbsp_cdev,&mcbsp_fops);3 \7 q5 U2 C5 r
      mcbsp_cdev->ops=&mcbsp_fops;
8 o2 T+ d% l* f0 \) q, s9 u      mcbsp_cdev->owner=THIS_MODULE;- l6 y; x; r8 q3 \! n' U3 S! Q
      3 q5 S7 w) ^. V
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
4 c$ ]% s& B, t7 p. h  X          printk(KERN_ERR "register cdev fail!");, K( K9 B% {0 _" H* R" X; V
      else
5 W7 |% C# M, ]  N5 O) E& c* e          printk(KERN_ERR "register success!\n");
; z' Z6 j. n/ K4 N   }
; F" \3 J' m0 E' L2 V4 I   else; m) F- `& Q* F* Z
   {  Y' z: w8 d0 s, L4 J! F
      printk(KERN_ERR "register cdev err!");+ ~) y- \2 |& y$ a6 m
      return -1;
& u% B5 i" B: w   }! Z4 w/ V% g/ H3 ~- \8 w. T" C
   : r. I! K& h  t9 X( t+ u* a, i
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);  T/ i/ |( w0 ~1 a* `4 t$ O: H3 v2 H
   if(IS_ERR(mcbsp_class))% X& d5 j- i  p
   {
! _& ~! L" \& X7 {& x      printk(KERN_ERR "register class err!");
# j! Q; l& e+ _( Y! W   return -1;- O! k9 J# z' Y* \* E) K( Q% a
   }- y0 Q$ Q* X# J  U3 U! N$ c& B
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);6 l* `% y) @8 |/ J2 K0 k7 p( ^
! j6 ^) p. ]  {7 B; v6 D
   //PSC( h5 W/ Q* c1 G' ?5 }  v2 Q
   //add Enable MCBSP
- |( h6 r  ^+ M5 B& U' B   //test( i( |" r/ D4 ?" f4 z: P
   temp = 0x80000003;
5 X7 c' X4 D6 Q; v8 @) `   writel(temp, IO_ADDRESS(MDCTL15_ADDR));& O# X/ Y& j: [0 [6 o+ z, \9 U' K, m
   temp = 0x00000003;
6 k# z9 p9 C% S0 M1 D7 C+ N   writel(temp, IO_ADDRESS(PTCMD_ADDR));' r7 |* {- a! r* V+ X2 {1 ?# |$ L
  p, R3 L3 M% v8 m
   temp = 0x001FF201;
8 W7 I( j6 c1 E9 I   writel(temp, IO_ADDRESS(PDCTL1_ADDR));' `) `& V; U0 l
   
" y2 t6 H  ^* X& I   //PINMUX  2 X7 z2 y) m& ]) x
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
% z* `! N, R* m4 I   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
% N  ]! \! A6 n8 Y   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
; U( H& _$ ?- }* U6 Y% W0 H- f2 U   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);( r5 R& C' t8 O% I
   
4 @" a  F" T0 F   //SLEEP_EN,EPR,L138_SHK1,L138_RC
5 s( q; Z$ ?8 P   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  . l# I' G# {$ k) i: P
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
' t3 q0 o# ]6 A   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
' J: R3 Z6 Y2 d
4 B) L3 V1 V! ~8 [   //RESETn,L138_SHK2
5 v4 u0 e! N% \   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ! ~" f( T. O/ h
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   $ x8 n0 b. v0 a, t" b2 ?
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);! I& g8 O# \2 P) Y& q
! {2 i& x. ?5 B0 o5 s1 Q) P
7 }% m* n8 b) Q' _
  //SPCR Register
1 T! ?8 O1 T; O1 M  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset" k+ L! K" x& Q# |. ?
  temp = 0x03000000;//(DLB=0)
$ O6 R# P, O" V! b: s7 n // temp = 0x03008000;//(DLB=1)4 ~  z- J8 `5 Y5 ?" S4 ^3 \% W
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset& t& n0 }$ p* V6 X7 ?1 K6 X( I
  temp = readl(IO_ADDRESS(SPCR_ADDR));
: v, |1 J' {5 S, S9 F% N0 ^  printk("temp=%x\n",temp);
2 M: W0 I! S" h  B/ |3 |1 X
* w" L& }. [/ O) e$ S/ K   //PCR Register
% k+ v! \* \. `   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
1 m/ E0 [2 s" E  // temp = 0x00000F0F;
8 A* b5 m  O2 }1 O  temp = 0x00000B0F;
: X0 q- g0 B* M- Q- m! R# n  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
' u' s7 _' L7 j5 ]* f0 P: ^6 _- P  temp = readl(IO_ADDRESS(PCR_ADDR));+ L+ }8 Q0 ^) |8 D' v, n( z. o
  printk("temp=%x\n",temp);  - _7 R4 z' W6 F5 ~/ |# k5 S  y/ `
   //SRGR Register+ y2 `1 x2 H' I2 l: B6 Q
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
5 |7 s' ?9 T% [, j' P) B) t* y //temp = 0x301F000B;
% N  k2 [% a. b2 Y: ~0 b   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
2 e+ ]& u! Y# U: J/ Q  temp = readl(IO_ADDRESS(SRGR_ADDR));  |/ a9 f5 _2 @% |/ y
  printk("temp=%x\n",temp);
, D: B0 p: K5 X   //RCR  g! E4 ]+ e3 A
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
: E2 U% K2 a9 a  y$ e   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
- @; K, M7 ?$ }" K( z   temp = 0x00440040;" C3 u- I  n: L0 n/ C% [& A
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   & n  I+ ~5 Y' V) O% A! R
   temp = readl(IO_ADDRESS(RCR_ADDR));
1 J! y2 j% j+ T( S8 V( Y) b" j   printk("temp=%x\n",temp);0 d! k) n* I, l  s
   //XCR
2 {3 D  m1 s2 ]& H. h$ w   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
+ }/ \6 g, ?" p* [( {7 j( S   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
7 C6 h; Z, }( _% B1 y& S   temp = 0x00440040;
# b; J/ E- k/ w* j/ K  v6 G- M   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
' G3 A) k) C( R% f6 s   temp = readl(IO_ADDRESS(XCR_ADDR));
2 O! x1 O% w& G7 [% H; [   printk("temp=%x\n",temp);, d9 ^. l, d6 M( E4 j1 s" z- j
  udelay(100);
+ E! [: h; e( c: X& H  //SPCR Register
" _$ u. N$ b9 c5 w! Y( M  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-19 k2 H$ s( j, F+ L* R4 X7 T# Y
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
0 r( B  B/ m4 C& L  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled* [- L8 b* t& j: a$ V% o: |8 V7 @
  temp = readl(IO_ADDRESS(SPCR_ADDR));2 A) e+ |# }0 B( X' {% h
  printk("temp=%x\n",temp);% }; E0 p' [4 n5 D
  udelay(100);3 q! c' U% K0 l  `2 E4 M/ E! O  e

- S6 j! F, s6 }+ `  //set GPIO direction" K( n5 R! b  C' x1 e8 f
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
+ ^0 a0 Q1 H& u* g4 E   temp = temp | 0x00000100;//EPR----input
- T, S' [) L% R% b   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
& R5 M; A. n: j0 @8 l   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
4 k: X8 X3 k! M: L1 @7 D. U
' M) ]0 X8 a5 {6 I8 Y8 l   return 0;
) ~; D5 @: V7 _. d) z4 d}
, r/ ~9 J& s) Ustatic void __exit MCBSP_exit(void)
% x9 h) W3 Z2 D% ~2 j. f{
' [4 N! A, [) }; }   printk("mcbsp chrdev exit!\n");
( X( }) I) f; V/ q" @# o   cdev_del(mcbsp_cdev);$ m3 `! ^& |% T' @+ @* ?- L
   unregister_chrdev_region(mcbsp_dev,count);) D8 H5 ~- n- @' U
   device_destroy(mcbsp_class,mcbsp_dev);3 W* h' f) b" b3 f/ R+ O
   class_destroy(mcbsp_class);
: o2 ?4 D" A( g7 _9 K$ M}! B+ U6 ]- O$ u; A5 Y1 i6 z
module_init(MCBSP_init);
+ w- o0 q! L/ E' V4 i; ]3 Z  `module_exit(MCBSP_exit);
0 n: O0 y- u: T
% u. `/ Z& B( w& G0 C- ]. BMODULE_LICENSE("GPL");9 N( X# w; b) `) U! }3 F" e( l/ E
: X( f* P8 A% T4 O8 [; R
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
4 ~/ C; x; p2 u0 h+ f: ]" }& \我的应用层的测试程序如下! Q+ R- |0 H5 q6 b9 y6 W# D
#include <stdio.h>
1 l. q  v. M9 }* S; Z1 ]; F  A#include <string.h>; P' n' G/ R% L* g% C4 \8 l4 d
#include <fcntl.h>4 q9 I( b9 v' Q
#include <unistd.h>
' k0 N5 f- m& T. V9 P4 q; d# G/ M#include <signal.h>' u& ]" z# y8 T; I, d  H
#include <pthread.h>       //线程0 B) E, I1 T3 e: e. \
#include <stdlib.h>0 f2 y8 C2 ]3 i. o2 k- S
#include <pcap.h>          //捕获网口数据
/ E0 O! Z* L* O, }% N3 F#include <semaphore.h>     //信号
; G. H7 m  O# q2 _0 j* O  J#include <sys/types.h>     //消息对列) ?% e1 K/ A& T+ v, L; X2 ?
#include <sys/ipc.h>       //消息队列
4 m! F7 }) a' o0 d6 w8 o7 I2 E#include <sys/msg.h>       //消息队列
+ e* }0 L- M: H( Q( r#include <sys/select.h>* X' i+ ]$ i/ ?5 x3 B
#include <sys/syscall.h>
+ ?0 h% p# p" x* x7 o# H#include <sys/stat.h>8 N$ O4 M& R  @6 ?
#include <sys/mman.h>
' ^/ z( j* }4 X0 j) t. _#define msleep(x) usleep(1000*x)
9 J) d# K) O) o$ q; P. r# S- }
6 l1 g5 g& `4 x6 ]0 [/ _/ Nint main()
$ `' Z% I+ b/ c% _6 ?" r{ ; f3 A: I/ @* u- l9 x% |$ ?
    //MCBSP,ARM与AMBE2000交互设备4 z. ~; q! p$ _* Q. ^+ a
int fd;  c0 f9 b1 d) w7 [4 k: d4 n
unsigned short data_write = 0x5555;
) L% D8 n) b- q9 y" N' _ unsigned short data_read = 0x00;9 i: e1 K9 k  J; {
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);( ~# _7 N/ s& d
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
% K: e$ s& [3 h$ p" [: L   
) S* @2 Z6 B, g  if(fd < 0)! r: `* ^/ O# l& @/ p
  {
7 \+ f: d  h5 r; j     perror("open failed\n");8 X! |0 n  j9 L2 I6 x
     return -1;
2 |. D) C2 Q. z  k1 Z  }
: V! G/ l. E' l! t. r  
5 F" s& f8 E) N. }9 q" Z( y  while(1)/ r4 U; z: K1 @4 A/ a
  {
$ D5 a2 S: I" a$ g4 s' n3 Q, j+ U   
' G& D7 A" E% v  r2 ?! v# B   //AMBE2000每次读写是24个字为一帧
3 Y4 o9 D: x0 V2 K3 o' M) ~# a   //写数据时将数据在底层存储起来,等到中断的时候再发送
! l  b2 B; b6 A   //AMBE2000输入数据是以0x13EC开头的
% U5 E- v& B2 S( `   write(fd,&data_write,sizeof(unsigned short));
3 h& k4 C/ w& ?: F! w( P. }: J* U   7 N1 K4 I. W" n; L. p
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
% o' m( V4 R8 z2 y% _   read(fd,&data_read,sizeof(unsigned short));
% d7 l. o$ @2 m: H' g   
. ]8 A. D# S- g  c. o( F4 c   if(data_read == 0x13Ec)
7 @  Q% e9 j( ?: R5 M) r; a: {   {
$ `2 U# t' Z% X! o! K$ S- ^   / l8 w7 G6 q! j0 z$ ~" a
    printf("data_read = %x\n",data_read);9 J7 O$ L1 J+ W3 b
   }
* r! A( _0 G% @4 A8 _" Y5 C; T9 S: ?2 K   
2 r4 {- L, }" M3 n; Y: _   msleep(10);
. _6 m" d6 W! N3 K/ k3 x2 s  5 X: b3 [* c$ y- x
  /*
* Z" ]6 [% M# m) l   ioctl(fd,1);   
8 X/ N3 I  E. P: r0 _ sleep(1);: X  T& `8 m8 n3 a- Q% K. j
ioctl(fd,0);2 G! u& q  Z) C1 g( m* H1 \
sleep(1);
& q; J; T5 C: A" M! H */ ; {8 }- }" R" l: B! X- K9 Q
  }   , y! Q. A* x2 B' p
return 0;
8 w$ X7 t. X9 w/ W- E% f  e
1 d% f4 B4 a9 k! q, V, y}0 o6 I6 x3 Z3 }' S/ t- U- r2 R# Z8 r

$ g$ ^# g. c+ C, B6 i$ c+ o: J1 Q7 K3 C多谢各位指教,谢谢! 急
; o; l; `' ?5 J% J( I4 N2 j* w0 c3 \4 d
  ?. f* W' {  V$ N

4 g9 J5 ]) N+ r1 I' a/ m! O9 J" q" Y) R* P0 d- i% v3 z
$ _0 c" w  b( J5 C2 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 00:45 , Processed in 0.040209 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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