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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: - ~" `8 t: ~0 Z7 ~1 z$ r
/*5 Y. G9 R2 c2 y& n; a
* Copyright (C) 2009 Texas Instruments Inc( D' Y' _9 Z: e
*! F6 j  F- m( q+ T- d: a# A
* This program is free software; you can redistribute it and/or modify
2 Y! d: m; |. Q" ` * it under the terms of the GNU General Public License as published by% u& n3 f% `/ a+ s  z
* the Free Software Foundation; either version 2 of the License, or' Y0 H' |+ R- h; e
* (at your option)any later version.9 l6 X" J/ D+ L8 m9 I3 l9 o; |
*
4 S/ W& c/ h; l * This program is distributed in the hope that it will be useful,
! {) B* R- f8 X: R$ X * but WITHOUT ANY WARRANTY; without even the implied warranty of
5 u: w6 T, |4 k# R: W * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  j* K6 r* |9 I( L
* GNU General Public License for more details.
! y& b; W$ W, p8 S% U% ^' W: L *0 Q2 t* m; W; m8 S; @0 I
* You should have received a copy of the GNU General Public License1 F& w0 Z( Y# Y+ f5 y2 z- {
* along with this program; if not, write to the Free Software6 L, F  `2 o2 U
* Foundati3 S7 v0 R; a- r
*/7 n. H# g9 ?# `  I
#include <linux/module.h>
( d$ O  |: K7 s9 x7 w# _/ V#include <linux/init.h>
! A3 S" {& o5 X#include <linux/errno.h>% b/ N8 t2 c- y/ L- @
#include <linux/types.h>
$ X& V  K* V* |) _" L#include <linux/interrupt.h>1 O' n) z2 c  L8 R: P) |# f
#include <linux/io.h>" J5 O, {5 N* d  s4 R2 X0 h& L
#include <linux/sysctl.h>* ?0 @" n6 S( V4 i, S& e9 O
#include <linux/mm.h>
/ Q' l! F- K, \#include <linux/delay.h>
9 T' E! v& c9 y#include<linux/kernel.h>* |. ^/ ^* H' B" Z& d6 }+ N3 K
#include<linux/fs.h>
4 P  ~# p4 q9 K: J4 N#include<linux/ioctl.h>
* [4 Z# J7 H( I9 [#include<linux/cdev.h>
# {" o7 K+ Y" ~5 U5 X* k( D#include<linux/kdev_t.h>
. H  m; l  L& ~#include<linux/gpio.h>! O4 h2 k) u6 _, u! U! C' ]
#include <mach/hardware.h>
1 s8 J" g) C5 F7 y( q4 W#include <mach/irqs.h>
) W" e; C1 M( A/ \  C4 y) K# S# U# S3 W- A$ @9 L, P0 k
#include <asm/mach-types.h>. \' o% r0 O4 A5 O2 B# ?# |3 z
#include <asm/mach/arch.h>" ?" u- h9 x! z
#include <mach/da8xx.h>
% u0 w) \& i1 u#define  SYSCFG_BASE   0x01c140006 ~: |  K# w2 q# L) p& ]
#define  PINMUX1_OFFSET   0x124
3 f* a' `+ z0 l, _, D. O#define  PINMUX18_OFFSET  0x168
% t( l/ J) B; d3 G& Y- M, Z#define  PINMUX19_OFFSET  0x16c
* l9 G# @5 s# ~9 I) e#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR2 V( f. b- `% |7 \" Z/ c5 _
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
6 F6 S. A. b' L#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR! d5 t0 C  z7 s. F
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR: s* F' e9 S& L8 @. p
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
  J! K/ }4 M! ~/ d( \                            / K7 j5 A- @4 A! ~: l% m
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
2 ~/ C4 g1 b  l" I; r5 o#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
: M2 [) b8 f/ z2 ~9 H//PSC
4 x1 p( s3 Q6 i. F( O#define  PTCMD_ADDR   0x01E27120  
" j7 a& o7 J* s#define  MDCTL15_ADDR 0x01E27A3C
  k3 h+ e- T/ s$ ]  O#define  PDCTL1_ADDR  0x01E27304" }; I9 |' a3 w
//GPIO8 direction
6 ^" e  r( E4 b2 E8 V#define GPIO8_DIRECT  0x01E260B0
( b: l: I; f6 M$ a#define GPIO8_OUT     0x01E260B4" h7 m4 [7 w2 x+ U8 A# y
#define GPIO8_IN     0x01E260C05 _/ n" Z$ v* Y) q# a( s

1 L9 A: b* x. K% U1 I, T//#define MCBSP1_RINT    99              1 ^  ~$ y" X' i+ a. y
//#define MCBSP1_XINT    100  
9 i; M; c$ p8 |! Z) k& y# P% _: ]8 istatic int MCBSP_MAJOR=239;2 d, ]; r, x' I
static int MCBSP_MINOR=0;" j! \. K' V1 U7 k
static int count =1;
4 o& Q! i; ~, e9 A! m
# g9 n2 ?0 S" x0 o9 E& d$ A#define MCBSP_NAME  "MCBSP-device"
+ S$ T6 ]$ Q- W9 m
9 o2 o6 n4 Y. `, Y% Hstatic struct cdev *mcbsp_cdev;
- p/ I! X) j% z" }static struct class *mcbsp_class;
, P! @/ H; U: k9 ]1 ^" Nstatic dev_t mcbsp_dev;+ t$ \$ O  M6 t" ^0 D% [
unsigned int DRR_data;0 c1 l  }# O1 ~$ F, H! R
unsigned int DXR_data;
/ i, U9 E. M6 s8 ]( t3 xstatic int mcbsp_open(struct inode *inode,struct file *file)
. k& q5 u: ^3 f% P2 @( T{# {) a) I  q9 A7 e
   $ o6 ]# @6 L* L5 M- j0 {1 F" o2 p/ t7 J
   //interrupt enable,initialized$ m0 O+ E* G  }
   unsigned int temp;
- A1 R) g6 k/ k: m: W# g   //SLEEP_EN(GPIO8[10])---0
5 k! J0 D/ O0 F$ f2 d3 U1 N: x3 P   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));$ E2 x$ G* M7 \! C4 s$ ]
   temp=temp&(~0x00000400);
* ]4 x2 v6 e  p8 s; s   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]* {# F! d/ g. E! @$ q
  //RESETn(GPIO8[8])----0----1  X0 t5 U/ E* A. I6 j9 c
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));2 l/ X  C$ I/ X
   temp=temp&(~0x00000100);8 P# b9 T9 H2 V
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
, u1 x* G( y& i1 Z   udelay(100);& z; X1 ~" U* A9 n' Y: w# i
   temp=temp| 0x00000100;
6 H5 Z0 |6 \  K$ y   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
) z! O5 k5 m# F2 `! h5 ^3 g   udelay(100);7 ]( d# @, a3 m( p9 z( [# F
   printk("open success!\n");: S9 F# B( k8 V
   return 0;
- u, w3 }( V' R1 b" ~+ L% o/ P}: d8 ]0 `% V! x1 s3 U; M0 v) b

+ J# `0 o2 `9 m# P* _static int mcbsp_release(struct inode *inode,struct file *file)
4 t3 N2 R2 _! T' N- n# {{
4 j. S+ p" m6 X2 ?3 T   printk("release success!\n");
- k" ]- B. W  L   return 0;. A3 I% C, `9 s$ s+ Y9 G
}& a: ?/ o) Z& V) `1 N/ x$ b
1 X$ g; o8 |! G; @/ ]/ m
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
" i, E2 ]  I' H1 @6 u$ H: H{
* M7 Z1 Z  G+ @6 i( |    copy_from_user(&DXR_data,buf,len);, b3 j, z0 }& @6 A( f, d
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       , p. [6 m- w2 U6 G0 j4 K! P
    return 0;! c' Q/ o( z+ h, s: a# \

7 T! r* ~) m6 k3 }' p}7 _5 q4 T! v' ?9 T% ~  y) C
" |/ x' X# Y6 z
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
7 g- B0 o! ^4 v, j( l2 y{ 6 _( P; W. }# c: j  a3 N
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));+ i& X/ l1 a0 m
   copy_to_user(buf,&DRR_data,len);
4 z5 U( ^$ s9 v4 \   return 0;$ j/ _- ?' [# L# `% r
}
+ C4 Z! @: M& H. E5 A) Z  k& H! A6 j. t1 n. o9 }+ O+ [

: D' A' r: Y$ @5 p, O  X1 e5 I( C% Istatic struct  file_operations mcbsp_fops=
! n( G+ O9 ?, J4 }$ U{" v- s  _- Y6 c: w9 v
   .owner=THIS_MODULE,
( l9 u2 o7 \, i* k. j% I) n' d7 V2 N   .open=mcbsp_open,
% d9 m/ c2 M+ K# n! j1 H! u& S   .release=mcbsp_release," d0 p5 s# @" L7 V" P% \& m: k6 a
   .write=mcbsp_write,
6 [  {0 q% h) k   .read=mcbsp_read,% V. N0 X6 `  }( h
};
: t7 v# C4 x  H+ `static int __init MCBSP_init(void)* C, _' ?, {6 K: g+ z3 c9 W3 X
{9 N. o( G( M5 _$ X
   int ret;
- [* F  N/ y% T* N   unsigned  int   PINMUX1_REG_old;
6 y4 |9 `' m  i* E, K' }9 B   unsigned  int   PINMUX18_REG_old;
5 f4 H) t8 z( ~7 o( Q/ U0 P   unsigned  int   PINMUX19_REG_old;0 [- f/ b' }* R# ?3 A9 e
   unsigned  int   temp;  
' M- _$ S9 J4 o- t0 H   if(MCBSP_MAJOR)6 v6 |7 O0 k$ d, H! J5 ]& a2 G
   {
$ B/ L5 O8 Y! f4 ?/ M1 I      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);9 b% a. Q7 G& ]$ S
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);: s$ j8 ~0 m' S9 b' E' Z* e+ p* v/ h
   }
7 B8 R! H0 o7 d   else: k7 `+ m' s" [$ G
   {
- y  x* y3 g; ?      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);; F* X! n7 s, J  R
      MCBSP_MAJOR=MAJOR(mcbsp_dev);5 L2 |4 Y- A1 y: V& b
   }
6 a# R/ P3 w; m: M5 E8 Q* G7 w6 H, t   
4 ^; n# N7 l; J- l, X" V   if(ret<0)
; U6 O$ N! K) q. l6 i   {
2 A* b0 [% I2 v! \$ }      printk(KERN_ERR "register chrdev fail!");
, E$ v; X3 @* d7 O4 k      return -1;% P7 J( G1 m7 H! e( t' P0 V
   }6 B: ]* g  {0 V% d
   . r" \1 \+ U$ h0 a
   mcbsp_cdev=cdev_alloc();
* z8 [, ]4 M8 T/ M& y) |   
* t- b0 J. h$ L; P2 y; [   if(mcbsp_cdev!=NULL)
1 F% \8 ], x# |: P. m0 c5 L   {
- e! X2 b/ I% ~2 U) f1 S. I      cdev_init(mcbsp_cdev,&mcbsp_fops);+ C. z! ~2 k" M4 o( M
      mcbsp_cdev->ops=&mcbsp_fops;% e0 ?& C1 T- {. U- @  ~
      mcbsp_cdev->owner=THIS_MODULE;, I/ M0 w$ z6 N6 a1 u  F# t
      
9 K, W0 }" E: l+ i4 g  ^  j      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
% a1 f- J( ]! T6 a          printk(KERN_ERR "register cdev fail!");$ ~+ @7 Z% i. R7 f/ U, _
      else
. m. ~& \$ l& H- G" U. L          printk(KERN_ERR "register success!\n");+ @3 ~& f% u, T7 N! K# S+ O
   }  @/ U1 \4 _" {1 D' Y
   else
6 c1 H4 e0 G) u: [   {" Y; b$ I! w/ A0 {& u8 C
      printk(KERN_ERR "register cdev err!");' s  ^$ v) u* [* G; [2 \" c
      return -1;9 ]# r- L( ~( B, M# Y' e
   }1 W5 ?/ U9 R- c$ ~) v
   
: D- e; _3 p, Z8 U2 O  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
! U3 a/ ]( f& c: C   if(IS_ERR(mcbsp_class)). L7 a  Z" w$ ~  ^6 {$ p7 |
   {6 t" J2 d  J$ y
      printk(KERN_ERR "register class err!");
; J  N( h. d% D( T0 Q, M   return -1;
$ B3 T. L5 f( c8 X% J! e   }
8 W* K2 t7 u1 ?2 j( C   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
1 N3 h) Q7 y" C2 n# G7 N" ]" y/ l, C1 d. _: ?/ e7 j
   //PSC
" n* P: y" G( U' x& L1 t   //add Enable MCBSP/ D0 @9 G: A6 B1 y/ ]* ?0 H
   //test
# Z$ H5 R7 u% \/ {1 m; j   temp = 0x80000003;
5 X) \8 m7 d# \" H   writel(temp, IO_ADDRESS(MDCTL15_ADDR));! V: ^$ l3 q- H
   temp = 0x00000003;/ E% Z- h! C+ V) j4 z6 C) B
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
) s1 k) K1 B8 A4 O) D5 S5 G
2 s. w8 ?. Z( C0 K$ X' f$ ~& R8 w   temp = 0x001FF201;" G3 ]+ L( v) h! j, ?) o) R
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));/ \, d6 E' _2 k3 s1 }# U
   
4 V! e* I6 K1 L& o! ]8 ^4 @, s   //PINMUX  
* y/ S6 D0 x; a/ B7 o  G  d   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,/ _2 ], _  U; k
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  1 ^' B: d5 i" ?! ]4 ?
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   $ T1 e/ A" e! f. S
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);9 ?# n  j" R8 s
   ' |$ E5 `& z1 q/ {' D/ A% z: N
   //SLEEP_EN,EPR,L138_SHK1,L138_RC; B$ Y& G! \7 R( d! C; x' ^
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
+ ~7 H- L) b4 U   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
: C" a3 n' f% ~% S   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);; c2 P+ S9 G( }. u
+ Y* ^( ?, t! o, W! z+ ^
   //RESETn,L138_SHK2
& l1 t/ [$ A- {/ M% Y   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  $ a- l  {/ c1 S: _( C9 N
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
" B: y* o' h& U8 _" z7 J/ z) S& y$ d   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  Z3 I7 e7 }& m3 S3 Y0 W7 z* \

! Z1 Z3 c, `" ?4 y( V
) A  y( {* K: ^3 V% @2 J; b+ b  //SPCR Register
( r$ ^9 S& Y& l, z9 z4 ?  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
0 m7 E  U6 e- z% V7 `0 i  temp = 0x03000000;//(DLB=0)$ _3 L8 N+ T3 z  W
// temp = 0x03008000;//(DLB=1)
# e# H/ ]2 x# ]- n0 y  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset& d, W7 G  F* O7 ^) S) ]
  temp = readl(IO_ADDRESS(SPCR_ADDR));
3 r3 F4 O! R5 Q  printk("temp=%x\n",temp);
# K/ _: ?2 X4 q/ t6 O3 n" `: v . \! e! d2 [* H1 ^
   //PCR Register2 J3 E' L! N7 m" O* V
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0: J% L: E" J" ~2 q, ~
  // temp = 0x00000F0F;# F, S$ K0 a5 f
  temp = 0x00000B0F;) ?+ s" i. C! h" \6 d
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
$ |1 Z9 i$ j4 y  O9 Y( x1 ^; S  temp = readl(IO_ADDRESS(PCR_ADDR));  L' U7 J6 d% X' n, Q
  printk("temp=%x\n",temp);  
  }$ Y0 g8 I& V5 i" V9 D   //SRGR Register
9 V" J1 `4 T" d) ^* k; X   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11( @% D4 s! N! c  d0 I
//temp = 0x301F000B;
* q9 r, E3 L+ F5 t! d) p( N   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
# k1 f- [2 c1 b: I; e. g  temp = readl(IO_ADDRESS(SRGR_ADDR));6 G6 P! }9 Q2 X8 M- }5 K9 l
  printk("temp=%x\n",temp);+ O( d' p4 X* r) T
   //RCR* A. E' L( c- [! l7 r2 P1 a
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
! \& e! k1 N7 M  Q6 [* |   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-00 Y+ I0 h2 T. ?' U3 t) G& n! x5 m
   temp = 0x00440040;3 H0 f. B6 l; ?0 U% X3 m
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   / p6 q: _4 M2 u" o# S0 u
   temp = readl(IO_ADDRESS(RCR_ADDR));
7 Y0 _( b. T, F8 @   printk("temp=%x\n",temp);9 L% g. z7 s0 M" ^5 s% j/ T. `7 g
   //XCR; M  K: y+ g0 B5 c) ~* g; H
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1. `& a( `! a3 L
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0, O% u/ c* q* @. x: W& x) u2 e
   temp = 0x00440040;9 Q/ b! \* z6 x* ?$ ~! k! e2 T) U
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   - g* @. u. b- _2 j. ~# J2 W) z
   temp = readl(IO_ADDRESS(XCR_ADDR));  m' @6 m& ?* J& t) v
   printk("temp=%x\n",temp);% f3 e4 B7 v! Y) B! B8 s1 f# C
  udelay(100);
! S3 p! z( g4 L# q) ?" T  //SPCR Register
( f% h, r- O6 c5 P  Q; l  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
6 D9 E1 n1 Y' n$ g- i  temp = 0x03C10001;   //DLB = 0 VS DLB = 17 f4 d" X! q' r' C+ }9 P
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
. X8 T8 b6 [0 u. m. v& D  temp = readl(IO_ADDRESS(SPCR_ADDR));6 [; n! Q6 f: R' F9 g4 L
  printk("temp=%x\n",temp);8 u$ L0 c' m" s" M8 D1 @7 w% I
  udelay(100);$ w: l- O9 Y4 B! x: V

+ \1 a2 P) |& x  //set GPIO direction$ B/ \, J8 Y6 S
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));, }# E. A7 i0 k& M8 o" r
   temp = temp | 0x00000100;//EPR----input
/ |. V, I# }; D+ P1 o0 h% N; d2 k   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
/ Z; X8 p1 x; g6 \$ v   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 2 k( F; X) \7 \: t6 J, A

# G$ v# N- b- x8 H4 @) \+ X   return 0;' K$ M; h, |9 F% ~5 ?: o
}- _& Y: P3 t$ s* }6 R3 K+ n
static void __exit MCBSP_exit(void); ]1 k5 }6 s, _& L* M
{) @# \) C) ?/ f9 A/ X* [: ]& ]5 y
   printk("mcbsp chrdev exit!\n");
- t" x! r9 |7 g& V   cdev_del(mcbsp_cdev);
: T: U& C( G, L" F# k) t   unregister_chrdev_region(mcbsp_dev,count);
! c, E/ ~) _  p- f+ v" B& s9 X   device_destroy(mcbsp_class,mcbsp_dev);
' l7 j6 }6 ]2 K6 r! y* e2 R   class_destroy(mcbsp_class);
3 _& L; _0 H; ?) d: X}2 f4 T# {9 k5 g9 u
module_init(MCBSP_init);
* Z  _. ^( x" @" Zmodule_exit(MCBSP_exit);. u5 S: w7 |$ S9 z

, p# b, p- s+ `0 PMODULE_LICENSE("GPL");5 r" c6 W2 @; F4 h/ N7 A
  Z, h' ]  m7 Y4 O- h
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。2 j* J7 P7 ~4 ?3 K5 Z' N, K
我的应用层的测试程序如下# K- S, a$ V: w: |* T
#include <stdio.h>
9 |, j+ _' z9 X  [9 B, g3 @3 l#include <string.h>
9 L) a3 f$ H$ I- V* ~1 @3 g#include <fcntl.h>2 W4 a3 G. L# w0 X. X& X6 V& G
#include <unistd.h>
- r' o3 \- @0 O4 X  ^) a1 T, m#include <signal.h>2 Q3 ^, w; n% |" `
#include <pthread.h>       //线程
3 v% ?: J0 G8 P; L  p#include <stdlib.h>
  x3 m9 @. a( J2 u#include <pcap.h>          //捕获网口数据
! X9 _2 V  N1 H#include <semaphore.h>     //信号! w  o9 ~9 \6 ~! ?& I9 c4 r
#include <sys/types.h>     //消息对列
; V* Q5 W6 N7 c4 }4 _) V5 A#include <sys/ipc.h>       //消息队列
8 Q+ @5 d, w7 S6 X& J#include <sys/msg.h>       //消息队列( _/ [0 ?/ \+ t% p
#include <sys/select.h>( z' ?# L; _$ Y! G( Y- ?7 O* a$ l8 g! P
#include <sys/syscall.h>/ N0 ~" I* }( s+ G- M- D: J3 T
#include <sys/stat.h>
. @! P; v8 l/ i+ `. v) b#include <sys/mman.h>6 O: C! |" W3 r" l3 M
#define msleep(x) usleep(1000*x)4 D( x8 d8 [4 M, {
3 f  ^8 o9 v3 [) C1 Q6 f5 Y
int main()
+ o4 n% |8 ]; f1 w# I# ?{ 3 M  _; U& _0 E, x+ f! E$ V
    //MCBSP,ARM与AMBE2000交互设备
* l$ z$ p( m- |0 k& h3 c int fd;: W5 S# Y+ U- d& ]7 e
unsigned short data_write = 0x5555;& }% @( I! S- H' F+ }
unsigned short data_read = 0x00;
% a3 Y, r' B1 b! V: K, p  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
0 ]9 `) r4 f5 G# E! W, N3 J //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);- Z$ l- z- E, y4 c5 ^( H0 ]
   
/ k. z, \' j6 F6 x  if(fd < 0)6 z8 b( v+ I& U" y  {
  {
4 o4 S& p7 ~7 T1 `* {" |8 l     perror("open failed\n");  l4 P# E- z$ {+ D2 X! s
     return -1;
) {* B& [" l; C1 L: Z. q2 g  }  V3 q9 F7 K, ^- V; f
  
5 {! b, Q( g$ S' ^$ H# X  while(1)
, i8 |" l; N2 S1 G; ~# Q  {
8 w; k$ C: Z' u; j   9 I3 a* G2 u( O/ Q, t/ p
   //AMBE2000每次读写是24个字为一帧
. }6 U9 m% ~8 N" K# C6 G   //写数据时将数据在底层存储起来,等到中断的时候再发送' G1 B% D7 r# n1 o" W( q
   //AMBE2000输入数据是以0x13EC开头的
) Z+ Y) B( O# ^, Y% s" N/ q   write(fd,&data_write,sizeof(unsigned short));7 U/ \% ^/ ~; ~/ X
   
/ Z1 y2 s! H* ~+ L   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  * b3 D5 D' `' x  K5 v
   read(fd,&data_read,sizeof(unsigned short));
4 w( Z2 b. L5 C1 a7 f" q   
; X& o+ }2 ]& d   if(data_read == 0x13Ec); e+ q- N6 L$ e5 A, U0 V& n! ]: C( h
   {
2 l) {$ z0 l$ }+ B$ @+ v3 b) |   
" r, @# ^1 ]5 @5 m. ]    printf("data_read = %x\n",data_read);$ ?* o3 V# ]6 [/ B! f
   }
9 y9 P. S" S* v" f( m% M   
" L; g! i* i0 p# U   msleep(10);
5 t0 Y! `  }) H' ~% b4 t- d  . ?. `& Q) N% S. ^' D- g$ \
  /*+ s8 {, q5 f( {
   ioctl(fd,1);   / e/ [* S/ `: x6 N, ?/ u
sleep(1);( U+ ?0 n  S3 K3 E: y- Y& N& F
ioctl(fd,0);; {+ x9 I5 l" b% d9 P0 S2 E: y
sleep(1);) o, T' e( b7 H" t, q
*/
7 `# f7 @7 ^* W; n  f8 z/ S9 @  }   
' d/ O/ H, I2 X5 z7 H% E3 Y9 l return 0;
. g6 H; m! E: n0 J  ~% M ( U% E, G! O$ m0 a! q6 \' d) r
}
- F3 h4 Q* m9 n  A7 _+ D
; w. G9 l' _. P6 ?' ]% y多谢各位指教,谢谢! 急- [& _  h; s3 A0 @0 A9 [8 J
$ B  I2 Q- k- }) _0 @! |: b

' _+ A" i+ x. c2 ?3 q2 X7 q7 E
; e, z% }- G' Y! a) @) ^" j2 i/ R' W# K9 |3 }% U, Z

& S) Z! c- |" Y& X+ F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 08:56 , Processed in 0.042019 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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