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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
* N3 z) s* v1 s! j; a/*2 R8 U0 ^$ u: z) y3 C0 @
* Copyright (C) 2009 Texas Instruments Inc; \5 |9 a: T4 H; B! p
*$ k$ l& B: a% [  w
* This program is free software; you can redistribute it and/or modify
' U/ B9 _( P5 Z6 l" y0 @ * it under the terms of the GNU General Public License as published by
1 `. L) G9 k0 v9 e  } * the Free Software Foundation; either version 2 of the License, or
' c6 U) ?; }2 R * (at your option)any later version.
% k! A4 s4 h& p6 e0 P0 B8 m, H *
/ W2 W4 |, Q1 U& i8 h/ U5 h * This program is distributed in the hope that it will be useful,' m0 ?, S2 A" N) Q" N  t5 }! }
* but WITHOUT ANY WARRANTY; without even the implied warranty of
3 _/ Z- f- }$ D * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
( U' U& ?" ]" h * GNU General Public License for more details.
( ]7 w3 u: E% c9 p( f *2 F0 Y/ B" m: _, a6 W
* You should have received a copy of the GNU General Public License
! I0 ]- H& T! C * along with this program; if not, write to the Free Software
. E# w3 k  G6 L$ } * Foundati
) o1 V9 L1 q% l6 f* f*/- x, c5 A! E# w5 @, d" h/ _
#include <linux/module.h>
3 a. Q5 k! Q6 b, [' j- ]& L" N7 }#include <linux/init.h>
, \/ \7 C" ~' f9 F2 B7 i! z6 g# m: f#include <linux/errno.h>
4 M7 h$ V, G  I% w1 a# s5 p#include <linux/types.h>5 D( r' E+ m& U, b/ D
#include <linux/interrupt.h>) k: J- ^9 A4 ^  A  V
#include <linux/io.h>
6 Z' s6 k' ?3 m- z, z#include <linux/sysctl.h>
" k  t- i3 _3 n#include <linux/mm.h>$ m( \/ O2 z/ Q4 r* o3 e/ Z
#include <linux/delay.h>
2 U8 {, T6 Y4 x4 `# M0 p3 V#include<linux/kernel.h>
" K6 n, i" e! S0 \5 W8 g1 n* |4 c8 W#include<linux/fs.h>
- H6 `9 I$ S" h3 H0 Z0 b#include<linux/ioctl.h>) B4 Y# o  X- F. b6 b" H2 ]
#include<linux/cdev.h># O8 j1 ^+ l" `! F$ O
#include<linux/kdev_t.h>
3 n, b$ L! [4 I6 r( P1 j% }#include<linux/gpio.h>
3 H% x0 _+ K7 Q#include <mach/hardware.h>& q4 A4 u) j$ N  I
#include <mach/irqs.h># a5 U$ z. r, ?+ ?+ w* w

: t/ h. C$ P! Q' Y) v; ?#include <asm/mach-types.h>  O+ R5 Y: G8 r6 a
#include <asm/mach/arch.h>
# m  z7 a: p+ S#include <mach/da8xx.h>
! t; i8 ~5 \1 ]2 b1 }( ?+ m#define  SYSCFG_BASE   0x01c140008 B$ z* o$ J6 U( S* k7 \
#define  PINMUX1_OFFSET   0x124
  n, k- K3 N8 Y#define  PINMUX18_OFFSET  0x168
9 F  n  A( ~( j5 l#define  PINMUX19_OFFSET  0x16c8 i8 i: ?& O5 |/ q
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR  ~& m  X0 D5 s7 v
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
8 t- @6 [* p9 K5 |  d: E3 s/ K! S#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR" X' e; P/ n" n7 K6 ?4 Y5 G
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
( B0 y: X% h$ h2 [. ]0 k0 W#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR% ?3 a( o( Y* r9 M( o3 j* b
                           
0 C" V" S; H5 }. S3 [" N#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
" v' e  k; W. m#define DRR_ADDR      0x01D11000  //MCBSP1_DRR5 z2 A7 T0 r8 T9 y
//PSC% i0 a' R( }/ T  k: i
#define  PTCMD_ADDR   0x01E27120  
/ K9 o9 o' n; o5 n( M! {! D; H- a1 a% J#define  MDCTL15_ADDR 0x01E27A3C+ m. v" H% ~9 X
#define  PDCTL1_ADDR  0x01E273047 \( Q0 {* c' J, F. K" L& l
//GPIO8 direction
/ L0 @4 P* ]9 P. {0 d2 D#define GPIO8_DIRECT  0x01E260B0# z$ I- z$ c" O. V7 w; o
#define GPIO8_OUT     0x01E260B47 O1 R) O0 f+ o* ^8 G3 N
#define GPIO8_IN     0x01E260C0
" s7 h! A7 r2 V! l
$ w5 J& l# K4 d5 O& O" B//#define MCBSP1_RINT    99              , x: \. u; b: E; ]! m- l
//#define MCBSP1_XINT    100  
- x1 }, V: F0 g$ ?% L- H; [static int MCBSP_MAJOR=239;( x1 E& F6 U0 W. [" E/ _: k6 R
static int MCBSP_MINOR=0;
2 o$ R( D  G* r: _- B/ vstatic int count =1;$ R7 y* d7 Y) d
! z& w3 `4 I& R9 R! z9 b0 H
#define MCBSP_NAME  "MCBSP-device"' g. Z( F( s5 ^8 e  y  \5 Q9 f
; B# g5 v% ^+ k+ M
static struct cdev *mcbsp_cdev;, n3 l$ O7 Q/ Y: ]) \. E
static struct class *mcbsp_class;5 \9 D. o7 M! h# v+ W, ]; {
static dev_t mcbsp_dev;. ~) f+ M: g  U1 Z
unsigned int DRR_data;; `. V$ ]$ U6 j" A+ T" |- V
unsigned int DXR_data;
8 [2 ?% c0 P, g% `8 gstatic int mcbsp_open(struct inode *inode,struct file *file)
. h  _$ Y  y3 z& r" P. c{/ Z6 e8 q* q) B; S
   4 _+ ^; s1 Z5 @6 a  ^& D/ D8 Y
   //interrupt enable,initialized5 `  z/ S# c) F
   unsigned int temp;
( g7 Z$ X, c: S: `   //SLEEP_EN(GPIO8[10])---05 N6 [7 T" Q+ x( \! Y: h
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
0 W2 f3 u+ G. b, C$ t   temp=temp&(~0x00000400);2 e: v6 z9 f$ o, _; C% T1 `
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
: k, I" N( u& O' l9 z& p+ }. k6 F  //RESETn(GPIO8[8])----0----1
; _' U1 U6 f- Y: P3 z   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));: ~  R7 Q: L' S1 O1 O
   temp=temp&(~0x00000100);" G( [/ d, [0 e' ?- b7 [; T+ d. C/ a
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
$ g6 O: w+ @4 j0 U  A   udelay(100);. w3 y! w3 o4 _( q6 Z
   temp=temp| 0x00000100;
1 N* F4 \4 N! I   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1* s, j9 [! w7 i
   udelay(100);2 b: |0 g. b4 l8 V% G
   printk("open success!\n");8 w1 g$ w' h+ ?' ?
   return 0;
6 s& N$ ?" W$ e9 z}, A- c- r/ J! q

$ x( [6 k. _' ~/ a# jstatic int mcbsp_release(struct inode *inode,struct file *file)8 n- G( ]9 n$ e; L- a
{7 p( Y: q! W4 j
   printk("release success!\n");
  O# x/ n& ?4 M2 u3 R   return 0;
7 ~* y  v5 u3 U+ l! \$ h}
/ ?$ L7 R* h/ ^& T3 }5 f9 ?+ s5 `# a
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off); E8 \/ v, K# }% Q
{
. g/ }4 N8 l' e$ ~! W    copy_from_user(&DXR_data,buf,len);3 `( _: z. x8 f) A0 Q
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
* K8 W& d* ~: ^" [9 y* {/ D    return 0;1 N1 d, Y9 D) i8 t

; v* s9 I& ^* j% g9 k}) Z' _$ \% `+ n0 x4 d6 Z
0 `# Y8 b! o9 H2 \1 ^; ~& B
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)! E+ }2 h  F7 h- C  g4 N% V$ H- P
{
# z( I5 C9 Y* i( R   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
# R* K) u3 ~! Q/ b0 p8 `' B   copy_to_user(buf,&DRR_data,len); 5 v- G, b$ ?( f" h
   return 0;  l# I# H; r  B% O- l
}
+ ^. a9 V& x* c' A  I3 `2 }; W. t' l( A8 q; e6 O

8 {0 k5 ^* D$ m6 lstatic struct  file_operations mcbsp_fops=) T9 J# ~+ E( ]1 Q5 X6 m
{5 k0 X: P, J- B
   .owner=THIS_MODULE,& g- h, {5 k7 ]( Z
   .open=mcbsp_open,  [9 v6 X9 l5 R: n+ Q1 b) y2 t
   .release=mcbsp_release," h& R* y& l- o6 ]  Z
   .write=mcbsp_write,
  N/ e, R6 j% q" S- w, s   .read=mcbsp_read,; W7 K1 f) M! Q7 j: F
};
% N# z; ?) e8 E6 h+ h( ystatic int __init MCBSP_init(void)& _9 {+ u5 s0 v3 D
{! T; A% {% E8 |( @0 O7 o5 j7 q
   int ret;
, k/ p' `! }7 T; i) q  }   unsigned  int   PINMUX1_REG_old;' Y1 c; N. b! F6 r9 O
   unsigned  int   PINMUX18_REG_old;
: x$ d4 c) _: }+ i; }   unsigned  int   PINMUX19_REG_old;
% [) g/ o) \9 w1 f6 l  I   unsigned  int   temp;  : ]- j- ]6 f* }! d
   if(MCBSP_MAJOR)) y7 e$ @7 C% Q8 t0 `: d
   {
& p3 @/ Q4 z6 n* ]      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
- h& u+ Q% F% f" E, u* @      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
. }+ Q( _- B' W+ K- C1 g$ t4 D  J   }
  j: Q' H# Q6 @9 R! `: f. k   else
7 a3 }6 G! `1 Q5 l5 \$ Y& d   {
$ a# j, c: q/ s4 R- T      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
( c0 `: I) ^; @' p      MCBSP_MAJOR=MAJOR(mcbsp_dev);
  o, z( N, L( \& t$ o# T' J   }% z. }2 M' C' I; s+ f+ z
   1 Y  z' j; ^* O! e) l. z
   if(ret<0)
4 b: C+ P1 u' P8 S   {
. q- ~) C4 j' T- x0 f+ D      printk(KERN_ERR "register chrdev fail!");
8 z  H2 P/ G3 d: ?6 Q; A6 h, k      return -1;
( p- n' j" b6 b8 P4 P- c   }6 Q5 R. f) t5 _/ O9 K2 e
   
& D, X  T4 V0 l, r8 C! G; X, }   mcbsp_cdev=cdev_alloc();
9 V$ R& _3 |& [* M4 r" w   8 ?/ S* V7 k/ S2 }
   if(mcbsp_cdev!=NULL)( [6 v' L2 z, S, |: x" m/ w
   {
2 F, u! j  W! b3 p% m      cdev_init(mcbsp_cdev,&mcbsp_fops);2 {6 V! ~2 }. T/ G5 [1 g! Z% C
      mcbsp_cdev->ops=&mcbsp_fops;
+ Y: [0 n8 F* X3 O* g. Y7 R      mcbsp_cdev->owner=THIS_MODULE;4 Y& e- L$ v6 p9 S- q, ]$ r
      + n0 L. j3 p3 F* y; w6 H
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))& X  Y2 B3 f9 ]2 ?
          printk(KERN_ERR "register cdev fail!");
( k- b& R# W  L% y3 Q0 h4 x( c9 i      else! e1 V. D& z& g
          printk(KERN_ERR "register success!\n");
1 B! r0 p  t7 q( N+ S   }, }& z. X% a5 D# ]
   else
6 _& U7 g" y4 k7 k$ }# U- \, s   {
- N) A: j, ~+ a5 u) p      printk(KERN_ERR "register cdev err!");  r" }; K. m# U6 k
      return -1;) W: r, n2 }) q8 `8 H' j5 ^6 x
   }
* y  ]' Z( F  g   
  P( W  I! k- L/ C% E  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
( h2 z, N5 W  S* G7 f   if(IS_ERR(mcbsp_class))5 f: V* p# Z5 _: U) w4 l0 q
   {8 ]+ Z( h* a: c+ i4 T
      printk(KERN_ERR "register class err!");9 W; ^3 d2 w$ V0 g5 _3 ?4 [
   return -1;; v0 k% I7 g: K$ n
   }
9 H# ]1 i# P7 [3 c   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
3 h$ ^: Q2 N0 d4 m
) V& z  x# k3 v2 ?   //PSC
0 ~, @0 J& J( p* l; S2 W   //add Enable MCBSP* N! s6 c7 l) ?6 U' |
   //test
( A3 b/ O# M6 U/ z( G   temp = 0x80000003;
4 z9 }. R1 ~1 Q# b& `7 Z) C   writel(temp, IO_ADDRESS(MDCTL15_ADDR));1 [, x' g8 k2 u( v$ {
   temp = 0x00000003;6 w( H8 y% {" k: K) j  |
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
$ h: F/ Y9 R8 e2 n' f' C
  a, y$ \/ E, |& P   temp = 0x001FF201;
" k8 l1 p; C% C/ s' w. Y: e   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
6 A6 b( J6 E* K: d" q9 J6 z, |- ?4 o   4 U' C, j3 P1 s) K& O$ J
   //PINMUX  
; l( l0 E2 {/ L   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
; V5 t) c1 @. O  @) d$ l   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  % ^0 G( }$ ]' i! z  n
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   + ]9 _# \( W, K8 K
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
/ n! e/ e- [+ c8 ~3 ~   
  z# I4 X9 m8 k9 F5 {' F7 a   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ j2 r7 ]1 }5 W   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
+ B7 Y% m1 n" }" L0 B   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
3 E" }$ v+ d3 o   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
2 n( D2 J7 z1 w# U  f , |' {/ O, a  `& ]$ B$ W; r! i
   //RESETn,L138_SHK2
2 X: A, n- E- G' R5 s7 A& M! [   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ( X2 j3 n3 w- z: r0 l
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ( L, g! l( [) e- X4 X( A
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);# r( R' i1 `8 K: }

7 D8 c% w1 V; Z7 a 3 ^6 U2 j. S1 B/ G1 ^+ E& F& M3 b4 j
  //SPCR Register
$ h2 O0 L2 W( H, M: w8 P. |( O  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
3 h( [( g( l# c1 Y! a  temp = 0x03000000;//(DLB=0)
$ M5 ]* E1 A( b5 }: ?% F& P // temp = 0x03008000;//(DLB=1)1 c) M+ u8 w% O3 f' e
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset, }. M2 O3 e* p+ U0 v
  temp = readl(IO_ADDRESS(SPCR_ADDR));
5 n: i" k+ D$ f2 |" Q" P/ ~  printk("temp=%x\n",temp);0 D0 z& m- \6 }! l- }
1 f6 K( ^3 g2 l
   //PCR Register
6 \2 \* Q% G1 z" P* R   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
& x- O) b2 I* H! \1 k  // temp = 0x00000F0F;
! o: X. q- b0 A1 u, Q7 S  temp = 0x00000B0F;
1 M& n! r$ `! @+ P3 b5 _! Y3 Q$ W% J4 }  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 0 S* B! |( z' h9 |( N5 a" a5 [6 y
  temp = readl(IO_ADDRESS(PCR_ADDR));- r6 X2 G: K  {
  printk("temp=%x\n",temp);  
: s$ G9 F7 V: w; q* S   //SRGR Register  T8 o3 d: ?; a9 r
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
  ]: l) t8 W% u' f8 U  z* R& }9 ? //temp = 0x301F000B;
- u0 j# j: K( p% J+ @   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
, }& v' [$ A! u8 Q* E. L" U# x9 Z  temp = readl(IO_ADDRESS(SRGR_ADDR));$ [4 `4 q1 f6 N; _" T
  printk("temp=%x\n",temp);( C1 _" ]3 ~3 s1 F" P
   //RCR
4 ^! H1 V. N. G  ]   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
4 f# ?  g# l( w+ h7 Q% i4 W   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
8 K! f7 F4 ]+ j* z   temp = 0x00440040;+ G. c# y. I9 w2 W7 z9 o
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   7 z1 L) {, [  d4 C: r
   temp = readl(IO_ADDRESS(RCR_ADDR));: C0 V; y" R2 W3 d0 [+ P' O
   printk("temp=%x\n",temp);
) [( e! [: A8 N7 N) e5 }4 v- ~   //XCR7 h+ B! }1 }; T$ F, m/ L. O! R
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1; x6 R5 g3 e$ ~  F6 Z& A
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0+ N: }' ^, |* B- \
   temp = 0x00440040;
+ M& b+ k; f  }   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
! i: s  u) b& u" H   temp = readl(IO_ADDRESS(XCR_ADDR));3 z- X6 b3 l' x# F1 v
   printk("temp=%x\n",temp);
2 R) V# z, Y( _5 n$ ^# G( Y  J  udelay(100);
  p: `  k$ l1 g( `4 Q  //SPCR Register' a: ]+ Y5 U) w0 Q, N/ N7 _/ o$ U
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
# x# B2 C  q7 z% D  temp = 0x03C10001;   //DLB = 0 VS DLB = 11 z" b. }# a0 u  c
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
0 E4 n: @' d5 Z) u  P- G  temp = readl(IO_ADDRESS(SPCR_ADDR));" u" O9 G" q2 |
  printk("temp=%x\n",temp);9 n" o3 |  F" \' F2 D7 D% n
  udelay(100);  I* I, g: u- q6 [  H
; n6 k. j: o. [# }& L; O4 [
  //set GPIO direction2 e5 O" R! s* |+ x6 U+ q
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));. D4 f' c  I) d! P* M
   temp = temp | 0x00000100;//EPR----input1 p. @8 o1 [3 u, R- I# I1 m% M
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output  A) X. A" H# T: b, b. ^4 M
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 7 o! G% C' `$ v  P6 k3 a9 Q
+ J/ a7 ?& T6 s
   return 0;
: ~3 x$ D7 `+ U. f}
0 ]% L$ T. H2 m+ ]6 }static void __exit MCBSP_exit(void)
% j% K# ^7 Y7 D/ Y) r  U# B{
! z0 f, W! r( b( A% l* d- s   printk("mcbsp chrdev exit!\n");& Z- J) t" M* S$ r) @& A* V3 l
   cdev_del(mcbsp_cdev);) ~9 S! s* z& [7 U) _, g
   unregister_chrdev_region(mcbsp_dev,count);
( T3 o+ ?6 E5 S/ y$ C( u% ~   device_destroy(mcbsp_class,mcbsp_dev);; R: p* ^' f5 D
   class_destroy(mcbsp_class);3 c+ @% l+ Z  ?  m. L& `+ G
}
( [0 c5 L! k* Z6 a: b* dmodule_init(MCBSP_init);! c; N" b% `$ n( s# C& B5 m% @
module_exit(MCBSP_exit);( a/ K  j1 q# i  c; K! s; N

5 J6 y3 L7 ^3 @! W% HMODULE_LICENSE("GPL");
: K5 d0 W" z) b9 O' j+ H! v& \6 l
' z$ z0 q1 [. T" z( k, k" o4 s我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
3 R, u, A1 o. z我的应用层的测试程序如下
+ o4 L3 P! r% N  W#include <stdio.h>6 L$ E3 J; t; L# i8 a
#include <string.h>- L0 n) q$ c- S7 h* o
#include <fcntl.h>
: e" m# t: V8 [. M* `7 Z  D#include <unistd.h>: U8 m2 e6 Z7 J% W4 \4 @9 t! F
#include <signal.h>
/ v4 S; r0 ^6 F; x) y#include <pthread.h>       //线程) M+ U8 v. b4 P% \! d
#include <stdlib.h>
7 \9 l' C8 L) v8 I. h) l#include <pcap.h>          //捕获网口数据+ N7 N# B5 d) }/ D% y9 w5 d$ j
#include <semaphore.h>     //信号  ?2 p4 |4 w! o
#include <sys/types.h>     //消息对列" U, {2 C& D# G$ K2 S
#include <sys/ipc.h>       //消息队列/ @' S9 @- E2 u) v. N6 h
#include <sys/msg.h>       //消息队列  o  ?) S- ^' l8 ~9 w* K- K
#include <sys/select.h>2 F- d3 w: k$ i; E! U; r
#include <sys/syscall.h>
* ~: J9 a+ S; [2 k#include <sys/stat.h>- v+ n" O' F# G% Y
#include <sys/mman.h>
# |7 O! H: k/ L7 ]#define msleep(x) usleep(1000*x)
- Q9 A* [! T& ]- Y- N# v* ]4 e# ^- `% n1 p4 y. d2 J
int main()
: ~+ o6 Z1 t7 M1 O" Y{ 4 I) W9 T9 u( M- q4 g8 p& R
    //MCBSP,ARM与AMBE2000交互设备
& D* `* s; ]$ @& u) [% z1 e+ t int fd;
# M9 |# l5 }0 z" L& W unsigned short data_write = 0x5555;
6 z2 S' _$ I- B) B4 C9 B8 Y1 I unsigned short data_read = 0x00;
( ]5 X( {, U% c. Q. b( N/ t  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);$ L( y( \- v9 l1 U. R& L
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);% i; E# E1 u1 O2 w+ p
    9 e# }9 G% l# P- e1 K/ Y
  if(fd < 0)
; [: C: @  ^1 T7 l  a/ `8 o. D  {
$ |5 r+ y' ~: g% Z8 |     perror("open failed\n");' S5 _4 p/ Y, w, a5 x
     return -1;( H* c3 @7 K2 b$ R
  }6 d  w( Z- ^. L. {
  
, x, d+ Q9 A8 i. k  while(1)) s! g" b" ~2 X$ T; n/ A" Q- o
  {
6 p0 m" A" G3 A   
; B, y& `' G9 u. X   //AMBE2000每次读写是24个字为一帧
# `& Q. `7 f7 A3 K9 C   //写数据时将数据在底层存储起来,等到中断的时候再发送
) N: l, e1 ~9 m  P! L2 m% t   //AMBE2000输入数据是以0x13EC开头的' C$ |0 z" I# L3 Z/ X
   write(fd,&data_write,sizeof(unsigned short));
9 \. @% n5 A2 _* ~6 ~$ j3 {1 G   
1 d3 T$ L1 c6 Q$ c& m( l) p   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  $ u  b6 O9 L6 b& S* a# v; S
   read(fd,&data_read,sizeof(unsigned short));1 [; Z+ D" s5 j+ p5 ?# Z7 A+ k
   5 W6 `- N+ n/ {& `
   if(data_read == 0x13Ec)( P( h0 `" a3 l/ c; h* D; w0 l1 W
   {9 h# ]6 J) L% l3 a+ E% C- i
   6 O) Q8 y% k' Y
    printf("data_read = %x\n",data_read);; r: x/ b. `( C
   }
: y/ \( n  s4 a0 V   . `0 D# \0 v9 m+ Q2 z+ h
   msleep(10);: Y5 i% }  e* C4 O
  
+ d6 V4 G: O. d. v  /*1 \8 }2 h0 Q! q* {' V5 P( `& @
   ioctl(fd,1);   * N- r/ b/ X$ L; s9 i
sleep(1);
5 W7 u$ N$ v; L6 Z0 T2 D ioctl(fd,0);
7 ^+ Y/ L9 K' `0 N sleep(1);% l/ `4 x! c: g% o
*/
" k* h3 v7 C4 w7 R+ R, ^' g  }   
3 Q3 c- [. [2 j3 @+ w! ~ return 0;
0 `, ^% M) A/ q/ S: [; h
! p9 `7 O" _2 F! Y}7 Y' R  B4 \# w) A& v
) i7 t# E( |' W% D
多谢各位指教,谢谢! 急
# b2 M7 z7 p- y3 f
, c7 t; u: X" S" }6 c/ e' K+ x: E( F, Y5 }/ o! Q  O

4 o5 J: A* W- g) B5 Q
1 @0 b2 _. J! m5 J7 b
7 Q) G" }% H5 f8 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 11:43 , Processed in 0.042114 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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