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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 1 A* R) g8 |1 |9 q' U
/*6 l' [. _# B8 U; T, n2 ]
* Copyright (C) 2009 Texas Instruments Inc
/ J8 y3 _- A1 }- L0 u3 V *
) r( ^3 Q  m8 Q. f * This program is free software; you can redistribute it and/or modify! e2 D. p- Q1 L7 z
* it under the terms of the GNU General Public License as published by( M% R0 r; c& X. O
* the Free Software Foundation; either version 2 of the License, or
: ~6 u$ A3 }3 W( A! E * (at your option)any later version.; A$ L7 i7 r1 a$ B$ S
*
! J! e7 H1 l4 H8 D% h6 y, W# u * This program is distributed in the hope that it will be useful,
1 Q$ y  J) j0 L * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 t; y& c1 n+ @" c * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% X4 Q7 U1 f) t  _3 ]2 @ * GNU General Public License for more details.
; T8 x5 ]$ q- I/ _ *
8 X  d6 X( g4 p1 q: }; M1 M * You should have received a copy of the GNU General Public License
+ r* ~9 @3 ]7 D8 p- u" z& [ * along with this program; if not, write to the Free Software2 ]( z# Y8 B& S5 B9 D
* Foundati! e+ o8 J# p1 g, F1 c/ n
*/+ g4 N$ T7 U, ^0 s+ P" O8 h+ N
#include <linux/module.h>; P+ Z! I6 ]9 G4 ~  B6 t, j
#include <linux/init.h>
  [: }; I0 O$ O% a. j8 U#include <linux/errno.h>* W$ R7 D1 Q# C/ a
#include <linux/types.h>
8 a" z$ }% W! F3 L! V' C0 y6 d#include <linux/interrupt.h>6 F- y! y' |7 I. Q( ^' ^' S% |$ D
#include <linux/io.h>
6 p: W" W0 e4 E#include <linux/sysctl.h>- u0 T1 D. y. s+ ]4 f- `, J: v8 }$ X
#include <linux/mm.h>
# ~1 V, N5 ~0 ]- ?" A5 i2 f2 f#include <linux/delay.h>; o, e7 l7 i2 D5 D# r9 h; F5 a( K
#include<linux/kernel.h>
- v7 \8 x  G7 T& X4 L  A, T! o#include<linux/fs.h>
2 s! G5 o  f8 a  ]( R#include<linux/ioctl.h>" Y- t- Y8 Y! d7 C& N2 I; Z, {- [' h9 e
#include<linux/cdev.h>; c% I5 y' U. \5 i+ ?
#include<linux/kdev_t.h>
8 F: g( g: F' }. P. ]- i1 e1 t#include<linux/gpio.h>
# o$ v" \; p" ~7 z#include <mach/hardware.h>
* E( I) u6 h6 L5 i0 L, ~#include <mach/irqs.h>
$ i# B4 T. Z3 F- g% b$ n" t) i2 Q3 _
#include <asm/mach-types.h>
8 O# O% m4 W/ x9 ~#include <asm/mach/arch.h>9 G# ?) J- s! d: d1 F
#include <mach/da8xx.h>7 W1 A! x) e" g# u7 ~) c- Q+ W
#define  SYSCFG_BASE   0x01c140004 H7 M! x% t% k" O* a" A- O
#define  PINMUX1_OFFSET   0x124
( f3 e' o* A. \; r& ?: c#define  PINMUX18_OFFSET  0x168
- L) a! G' S" m# U% E, v#define  PINMUX19_OFFSET  0x16c0 ]* y  ^9 J4 P/ \6 o! X
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR4 y& o$ \) P3 d& ?( G2 G. @
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR3 F0 ^/ I& P6 K* c5 M4 v
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR& A9 Y; S7 ?! e" Z* }
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
, M& T8 G5 Q+ I7 W+ X7 N#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR% P4 ^8 R% T/ r
                            1 v4 A& C5 s0 r( T: x
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR& j/ i. Z* |# R) k1 i
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR6 V9 o; y3 v% U$ L5 N4 o( R* h% P4 N
//PSC$ e- T8 a7 L* V% l! y
#define  PTCMD_ADDR   0x01E27120  8 j8 g' X/ e8 e' C' ~3 i
#define  MDCTL15_ADDR 0x01E27A3C8 K! P6 G  E( v% {" N) w7 ~: Q' O
#define  PDCTL1_ADDR  0x01E27304+ M+ {# L5 L# x
//GPIO8 direction$ n# u3 B, g6 b; s+ Y
#define GPIO8_DIRECT  0x01E260B0- J1 W' x5 I, |; R9 M
#define GPIO8_OUT     0x01E260B49 c9 P: w; o6 y2 \7 z% _" D
#define GPIO8_IN     0x01E260C0- Z) K/ w1 S2 q+ B  Z
  C( ?. Q: `2 ]' u/ z
//#define MCBSP1_RINT    99              2 r/ O( z& V( u/ N
//#define MCBSP1_XINT    100  
7 ]. l$ N- |, e: c# Ostatic int MCBSP_MAJOR=239;
3 o2 m* K$ N+ _  D) [9 Xstatic int MCBSP_MINOR=0;
- Z4 ^; F/ C" H% mstatic int count =1;- q9 W/ }5 A. Y! ^/ u! e

4 |6 Y. O+ F# ^, Z; T: s#define MCBSP_NAME  "MCBSP-device"6 @- I; ^. _! G. G7 s0 n' u' i
" I% v3 R( e: ?4 s. u/ c! N
static struct cdev *mcbsp_cdev;) i# a5 i9 M# G1 ?4 V: x
static struct class *mcbsp_class;
1 ^* z: Q( G# h* y6 ustatic dev_t mcbsp_dev;
* i) T- `3 f; F9 \. z' ounsigned int DRR_data;- b5 ~; ~/ l9 f, h3 H& }% f
unsigned int DXR_data;- r% q# d4 e9 E6 v/ J1 {: J
static int mcbsp_open(struct inode *inode,struct file *file)2 {+ g& J& s+ z5 M! v$ w
{' b: o# c  x5 C: a" @  j
   
: ^! f; H/ s# l8 q. r   //interrupt enable,initialized* H9 H: [9 T3 H0 \9 Y! {- f. f
   unsigned int temp;
! R( V5 c! t8 x   //SLEEP_EN(GPIO8[10])---0  T9 P; r) _/ ~" ~9 q$ n" D0 D0 O
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));, h- I+ s  ]. {+ S, `! O& r, T
   temp=temp&(~0x00000400);
  j; M/ z( _6 Y& t' `8 V9 X, Q   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
5 X# F6 f, T7 p; o7 P* F  //RESETn(GPIO8[8])----0----1
* i7 u3 N; e8 `4 \& m2 [   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
- d, {; H: s2 p3 u1 t   temp=temp&(~0x00000100);
% G- x/ u, a, _+ `   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0: ^8 W! _, d: b- A4 M
   udelay(100);
* @) t% e* g, G  ?   temp=temp| 0x00000100;
9 @, {+ U: I+ H1 t$ z$ U5 H1 _   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
" G. z- K5 F% X. D' o   udelay(100);% x( o# q+ k- |+ A- o* T. A; E
   printk("open success!\n");7 i+ s& Z) {9 g* ~
   return 0;
8 Q1 C" H; T  Z# C! m4 u- ?3 r}
5 \4 N* |& M/ d/ N6 l
/ J8 h% }5 n) S  d8 Qstatic int mcbsp_release(struct inode *inode,struct file *file)
' B3 P( O# b8 a# Z, a/ ~{# i9 N$ v6 O+ i& x/ c$ h" l
   printk("release success!\n");. c! x) b: l2 v2 l4 Z# p3 G  i) p! s
   return 0;
' e7 M/ H9 c" P1 P& t" Y3 z1 P}- H% `. W2 n: f6 O3 ?

- n1 k- S* G) v9 L- S5 j8 Astatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
* H& R3 T, _& X* {' [4 h7 T{
! f, {& \; P+ l* S" n; C5 R    copy_from_user(&DXR_data,buf,len);
6 R2 \3 b0 y- y4 X( |9 `/ r) H    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
: T; {. U  \& K; [3 c/ `2 v4 b  y    return 0;0 R! k2 Z8 [' r! ^$ ^

: x0 }2 S' B* K% F  s}
) i/ \: Z$ Y/ J1 S* }2 p  Y3 v3 ?& j9 ]+ W5 J
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)6 t+ u% j1 m2 x
{
" o7 q+ i1 y' d# c/ {8 p   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
' w3 U; J1 N7 `" H   copy_to_user(buf,&DRR_data,len);
" R% E" ~+ e: H3 n+ u  u   return 0;! z8 z: J6 H% L- E0 W0 j; B# j
}
, o0 p: l0 o9 D: W) a! x
/ S; Y9 M+ @  S- i
, `1 y1 l$ R! P% l( S9 B+ rstatic struct  file_operations mcbsp_fops=
2 i  C. n) F* ]% ~# U0 F{  W* f9 u. r* p5 {# Y3 r
   .owner=THIS_MODULE,
6 e3 @' g5 I& O+ I! C9 q" i   .open=mcbsp_open,
2 [) U& ]2 c$ n2 h   .release=mcbsp_release,
. `- O  A% _, ]2 z4 o* D, ?/ d: a   .write=mcbsp_write,/ }9 j$ H1 w3 r! F9 ?5 s
   .read=mcbsp_read,
8 n4 K/ Z0 `, y& ?, }};
- I. Y) r! k3 W( m1 H1 y4 |static int __init MCBSP_init(void)
. c  h, l8 n1 N- A$ x{7 T" i4 p3 o: {1 u* b4 z( i
   int ret;
5 v6 ^5 a/ w/ w- b   unsigned  int   PINMUX1_REG_old;
* ~' l/ ?! p7 W, t   unsigned  int   PINMUX18_REG_old;
& y9 B2 F: t7 q1 W( Z   unsigned  int   PINMUX19_REG_old;
0 {$ @3 f3 y1 h   unsigned  int   temp;  
$ Z: n0 E0 h' c, N' [# v9 ~   if(MCBSP_MAJOR): r) B& ?: d- ]
   {: D- U9 K3 u1 _- b# G. W
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);! v# O( A) `/ n. N; r: U
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);  V0 w. `% q) }1 i1 r& E" i3 C
   }
; }. \. Q& C. m1 B$ g8 H# E   else. S& N9 @+ n! _7 V) J/ e( a# `: j
   {5 v: J) G1 |4 ?) U
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
* t* n) w" s) X6 H# q      MCBSP_MAJOR=MAJOR(mcbsp_dev);6 b4 X* ?, G0 z6 Q/ d
   }% u( ^+ k, E6 h) t1 w9 ]
   
( V4 Y. r: x; |1 u   if(ret<0)  ?) V" t7 D' i: l. s1 T
   {' y' i  G% L+ L8 \3 }4 _5 P
      printk(KERN_ERR "register chrdev fail!");
# d* y( @; j# K      return -1;
4 _1 ?  ^" J: D8 ]: n' D4 Z   }
- d3 a) ]1 @; f" C' r3 }4 A   
. B3 U+ Y1 i3 H% B   mcbsp_cdev=cdev_alloc();
9 v+ ~# z6 w  ]! F   
+ h1 x3 ~0 O0 J- F$ ]   if(mcbsp_cdev!=NULL)" [+ R. O; i8 O+ s
   {2 }8 ]/ c. M% P) }/ J
      cdev_init(mcbsp_cdev,&mcbsp_fops);
$ E3 k- }3 G/ {- p$ p9 V      mcbsp_cdev->ops=&mcbsp_fops;
: J7 H8 M9 d. j9 t! `7 {4 v      mcbsp_cdev->owner=THIS_MODULE;% K7 |, e) d8 I% l8 K; C
      
1 H' u. y; A6 s% W      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
  k% f$ \; a& p2 V6 Q          printk(KERN_ERR "register cdev fail!");
0 y* H% G3 N6 H1 \      else
' p; \. L3 `6 g4 @& U3 N' n7 J. N          printk(KERN_ERR "register success!\n");& _6 W' X' c* R
   }
/ k, o6 ?, Q# Y, T# u7 r8 l   else
: E. ]8 k9 L9 K. l6 m/ O: r5 P+ F; R   {$ x4 ?( ?( @" L  F
      printk(KERN_ERR "register cdev err!");
/ f- ]( D( O7 k$ }+ b. s      return -1;6 b+ q2 s1 Q: i7 R& f% @" T
   }
% `3 U1 J' B2 S" s! s   
) \  K' V% [6 D- Y9 c9 l  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);* _" R. v& I, X
   if(IS_ERR(mcbsp_class))
' r9 @8 u7 S2 C% b   {+ W! H7 u& L2 ~( N
      printk(KERN_ERR "register class err!");
# g& |1 W% f: p1 J   return -1;
' N. `5 \. g. M7 {' Y7 i   }& u2 ^; c- n; ]6 ]" P1 H
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);3 P( a/ \  t3 ^
# a2 A& h6 [& ]/ E' x
   //PSC# z* x4 _" G, D/ K& l& j/ F% b
   //add Enable MCBSP& Q& W1 q$ [6 `, w# P5 \
   //test2 z  R$ ~7 f2 D/ p6 x
   temp = 0x80000003;/ v5 b) X! G' A
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
8 G0 Z9 D3 [9 h0 W1 |+ L   temp = 0x00000003;
( M7 T6 K; D- U# r0 x: P   writel(temp, IO_ADDRESS(PTCMD_ADDR));
" y  z: h/ A3 t ) m$ Y, s% \4 U' W
   temp = 0x001FF201;
: v+ U& s& N" B. H8 r   writel(temp, IO_ADDRESS(PDCTL1_ADDR));7 o. U2 R! E8 P% Y7 a+ l5 e1 Z
   / V' D6 k5 z5 t( |9 f
   //PINMUX  
& g( a0 x/ T7 w8 q   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
- i6 W: r: p; i/ G: Q   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
+ P5 }2 W$ ~9 m+ @6 n   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ' B. c0 Z; q/ O# @) q) o2 d' j
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);. B3 r- R9 m. u% D
   1 }! G: Z$ v' i: r
   //SLEEP_EN,EPR,L138_SHK1,L138_RC7 q5 q7 i. E! ~7 {! ]4 U! w/ |
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  , Z  J! Y+ K8 F1 f( f7 R' S  ]
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
' b! ~2 j, H# e  J& ?. @+ O8 _   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
  D% W) I, @, w; h+ h; \
$ s1 Q0 ^# Q, G2 K6 ]/ g- I   //RESETn,L138_SHK2
/ w4 t' u; P3 P' Y9 }   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
1 a+ T2 V6 r- Y9 |; n3 I+ z   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   $ [; D. w8 R. {# s6 U+ D
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);- R; ?2 q! P9 w9 ?7 o5 p& S. e5 m! `

+ P- @+ Y4 O& I3 Q6 ]* b0 ^9 d - l, ?  Y- }' j( x  I
  //SPCR Register
& t( M2 ~/ K. Q; J$ j  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset) k% @; L& y" Y4 l
  temp = 0x03000000;//(DLB=0)! I; W; ^- ~& a! A2 i$ V( r
// temp = 0x03008000;//(DLB=1)
; K# F% A9 x! f, S  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset/ Y' c. @! U, c" N& z# H
  temp = readl(IO_ADDRESS(SPCR_ADDR));
9 ], [. B. p! ?# i: o- \+ }1 n8 _  printk("temp=%x\n",temp);- E2 a9 y: ?8 Y3 |( ?& j
; A1 [( O* a8 k: h  U  W
   //PCR Register+ `! Z4 H! ^/ q# r
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
% _5 ^/ Q0 W) C! k- i, z, k  // temp = 0x00000F0F;7 Q2 W+ H; h3 q3 V7 p- ~
  temp = 0x00000B0F;
; t/ l- j. g5 e& ~, h& W  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
. \: _5 f5 Y0 x) ^, c9 d$ C& P  temp = readl(IO_ADDRESS(PCR_ADDR));! G$ B" N# R* v- R# \/ D% q
  printk("temp=%x\n",temp);  + t& ^8 E2 f! e% |
   //SRGR Register
; m8 M, C, I  u) B1 K   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==110 O' f) K1 r- r3 }
//temp = 0x301F000B;: A1 ]/ R* W3 d. H
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized % |* u9 v" e5 l; j2 j! A$ P
  temp = readl(IO_ADDRESS(SRGR_ADDR));- W& B% B- P. [; {, t
  printk("temp=%x\n",temp);( u; `( @2 V) L9 z: e  [
   //RCR% R5 E) I) G! v* |: a. F- W' E
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,+ k; s  o3 [8 M$ A; N2 m
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0; U  S0 R7 F9 ]. R
   temp = 0x00440040;
9 ?* h" t2 E9 U( `0 x9 m   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
# f- _# q4 R' x" L) r   temp = readl(IO_ADDRESS(RCR_ADDR));
, G. f4 E( F: l! `' ]5 U   printk("temp=%x\n",temp);
+ N& |5 h+ G* E8 ]6 r; @   //XCR
& h* s  u6 c- U/ ]1 Z7 i   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-14 ^1 J. }3 V- F
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
7 i7 l0 m5 P) I7 L7 m, E3 a5 ~   temp = 0x00440040;: k+ X% O% [* C# l" M. U& K, B
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
# }, d+ ^  W; @+ g   temp = readl(IO_ADDRESS(XCR_ADDR));
' ]8 j& L3 J% O& W7 t0 r   printk("temp=%x\n",temp);9 J! \* |) i! \- {9 S
  udelay(100);' p% z4 \3 W3 V, Z  I+ T
  //SPCR Register
( h( Q# P) ?0 k( v, s  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
/ z4 w$ a. @% d2 k9 T& W. G) K  temp = 0x03C10001;   //DLB = 0 VS DLB = 1  Y% r! O) P4 q! u. Z$ {4 x
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled  l* a0 y" C4 r7 W
  temp = readl(IO_ADDRESS(SPCR_ADDR));: I% e5 b' _8 s; V. l
  printk("temp=%x\n",temp);
/ s4 B2 A) z% ~: Q3 m  udelay(100);
+ }( d3 G/ F4 g7 O6 K9 f
+ S/ s2 @( r; u6 ]7 p1 _  //set GPIO direction
% J. o  _. l% n3 p8 Y+ H* A" ~   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
3 O* f2 \0 I1 N1 K) l   temp = temp | 0x00000100;//EPR----input
2 _/ P  ?$ f4 U   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output3 t+ K; r! }' P1 z! e
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));   G; O  R- \7 A; }
( K1 }+ B/ L" N0 i5 C8 J6 x
   return 0;
0 H4 R! v, H9 G}
. f6 C, A- N+ P% x; c) `0 Qstatic void __exit MCBSP_exit(void). i: ]2 C- I/ P% C
{) K: \) [" s% v* A' W
   printk("mcbsp chrdev exit!\n");
2 f! q1 i! K4 r   cdev_del(mcbsp_cdev);9 b; E: T6 L5 Q0 H
   unregister_chrdev_region(mcbsp_dev,count);; k# O5 I- W5 l9 ]2 o- Z5 P
   device_destroy(mcbsp_class,mcbsp_dev);
0 w/ s$ f  v3 ^   class_destroy(mcbsp_class);& S$ B) i2 y5 `; ~6 Q1 l0 ~$ H
}
$ V' P7 w( m" d' J+ \" {8 _module_init(MCBSP_init);
* B$ g% m9 T' j) M; k9 imodule_exit(MCBSP_exit);- @5 E4 o& c# M; D: y
6 i! S( v7 r! F
MODULE_LICENSE("GPL");4 A5 T- P. Y- K+ T4 F5 l+ K

7 e3 r+ i7 A& L* G' z6 V我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。* ~* Q5 J  M- c) |, m
我的应用层的测试程序如下' V$ Q+ O( e8 S( ~% l- R& h
#include <stdio.h>) C) D. x/ X$ B7 g3 c. x0 P
#include <string.h>+ }. S  e4 _4 c4 j
#include <fcntl.h>" w& {, K% u' A& g4 b' J6 k
#include <unistd.h>1 x5 ?$ y! Z- V3 o
#include <signal.h>% v. @9 y" R6 v5 r1 E* @& H! n: v
#include <pthread.h>       //线程
; ^% G  I6 O. T" `1 j; K#include <stdlib.h>( ?  f* q$ N7 i8 s, [
#include <pcap.h>          //捕获网口数据- N+ I! }; g' H% T; P& g
#include <semaphore.h>     //信号
2 `/ S, ~6 ?6 r4 P#include <sys/types.h>     //消息对列
6 f* l5 u, `# s: h& i#include <sys/ipc.h>       //消息队列( U% u+ t" Y6 M! x
#include <sys/msg.h>       //消息队列( {" ^, G, O7 S3 w
#include <sys/select.h>
% F2 ?: L% ^3 Z1 Y! W/ d2 o0 J0 C#include <sys/syscall.h>
3 M* R+ K7 u" u; L( D7 V6 C8 o#include <sys/stat.h>" l$ U( `: ^- w& }' i
#include <sys/mman.h>
7 @( Y" W, i: X) }' ?#define msleep(x) usleep(1000*x)/ \& b5 s3 t5 E, _7 s
9 W$ J3 O. p; {% n; x! N
int main()
& H) i2 K6 E! r% f$ G{ 2 u9 N* U/ G- x1 @% |/ f- Q2 J
    //MCBSP,ARM与AMBE2000交互设备9 D! \; }3 Y" t
int fd;
" h- d2 j0 b! p unsigned short data_write = 0x5555;( B9 P6 h- I( v3 m
unsigned short data_read = 0x00;
$ U. S% F! N2 M7 ^4 s  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
6 V* P0 R1 v+ ^: p //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);8 m: Q2 l) T) G2 C/ K  w; B( f2 Z9 N
   
  R$ A/ H( J9 g  if(fd < 0)3 g5 i( m. i/ a/ T0 y  c
  {
% U7 N/ G) B) i8 s     perror("open failed\n");  e7 z( v  ~) b" g8 ]( d
     return -1;6 W5 V# ?6 ^8 w# U: q
  }2 t7 s/ j# Q, i0 r& _
  
+ P- L! ~+ d* e( {  while(1)
) _( f( U: Q1 p; t- i, i  {
6 Y7 d# {1 ^* _1 `. _   
' C) |% k: ]3 M6 L. b% J   //AMBE2000每次读写是24个字为一帧
3 h' j5 f8 ]& S  o6 W   //写数据时将数据在底层存储起来,等到中断的时候再发送
5 p+ T+ c' U4 A' l3 k0 P   //AMBE2000输入数据是以0x13EC开头的: e- @. w! f2 H! e/ {/ R7 Z
   write(fd,&data_write,sizeof(unsigned short));
. ^, g, N  d: z" k   
; X. I# S0 H5 ~   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
7 U8 _% T1 w' f% i   read(fd,&data_read,sizeof(unsigned short));
  D4 w& e; `) a) }7 V' D: ?   4 P7 I7 H& k, X% ?7 k
   if(data_read == 0x13Ec)/ Y$ F; y) T3 P8 Q' K% U: P; U
   {
2 R/ G6 f- a2 O% s' Z4 v   
  v: m  {& q7 R( q    printf("data_read = %x\n",data_read);! @8 f% G4 L- W
   }
  @6 j* H: N8 E8 k   " R! u: J# i: H* g( M
   msleep(10);
/ O$ r8 i" u. P  _  
9 X8 Y9 u7 C/ U! \  /*
6 E5 f1 S; U4 k" `& T  {0 `" U8 P   ioctl(fd,1);   ) N4 I4 q/ o  P+ x5 [$ r1 q6 l2 _2 ?
sleep(1);& `7 `4 j: I6 \1 p, [6 y5 `
ioctl(fd,0);
0 G' a3 K% R- ~2 p1 R5 z sleep(1);
; s+ g7 C/ C6 Z8 a */
% J9 N# @  r0 a7 ?3 k) r  }   % W. t3 O, e, F8 S. S
return 0;( Q# d2 O4 E( W( q
* D1 t. k$ E. ?/ ?4 u
}, b4 O* N0 e" m# x& V$ p
9 ^' n% W* |, W/ Q8 [4 n) k
多谢各位指教,谢谢! 急
# r# ^; U4 D' L2 B' Y4 ~2 v7 @" |/ F* B* `- _

) \5 ?% A; f% ]$ S! X; \3 ]) M- u
" q, m+ G: A! _) }/ ]0 M: }; ?6 r9 S* N" l: E* _1 f$ H
6 [/ ~& t, p* }+ _7 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 12:44 , Processed in 0.041217 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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