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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 0 Y1 k! U% d; X2 V% m4 y
/*& D- H3 W, Y8 p4 j
* Copyright (C) 2009 Texas Instruments Inc
/ V/ T! W" A+ A1 @# f  ^: w. }! f *
/ n; J* s# W0 X. N; R * This program is free software; you can redistribute it and/or modify" S1 p/ l( ]: c, P5 u$ [+ _: l
* it under the terms of the GNU General Public License as published by- ]% L+ q/ `' r+ X
* the Free Software Foundation; either version 2 of the License, or
/ b+ ^9 I/ h5 c% }( O2 x * (at your option)any later version.
7 l+ k! I6 X7 |1 S* j# r  V1 s *
( {: v+ }  e  L5 `5 E/ @/ n& l) O * This program is distributed in the hope that it will be useful,7 M( z# e9 g. ]% P
* but WITHOUT ANY WARRANTY; without even the implied warranty of& [0 k- v' Q' I0 Z( N
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" q" H* Y# w3 \- K- Y& h
* GNU General Public License for more details.
$ T3 g+ H+ U( k! @& @4 q2 w *
+ L* q$ h: ?$ \- O * You should have received a copy of the GNU General Public License6 J" K: T6 D' l9 P
* along with this program; if not, write to the Free Software# u7 i/ F  A: ^
* Foundati. n1 G5 G( @% K& V' H# p
*/. u' v% P, n9 k8 M! R2 {4 y
#include <linux/module.h>
! ~9 D, A/ s- H6 M+ S$ m) e! g#include <linux/init.h>0 l8 H4 A: ^; R5 e% h) |; V" D9 H+ Z& t
#include <linux/errno.h>
4 X- O; S0 |  G#include <linux/types.h>; I$ s% d2 j% H5 o
#include <linux/interrupt.h>
. O% U! u0 @  f#include <linux/io.h>/ w% c4 c# w5 p) }
#include <linux/sysctl.h>
6 N9 Y7 _1 X/ ]& b+ g1 N1 u#include <linux/mm.h>
, H0 b6 ~1 q4 |& x6 }8 P# C& Z#include <linux/delay.h>  R; F2 y# D, f5 A" N) z0 R
#include<linux/kernel.h>+ V. k. [  Y# D
#include<linux/fs.h>1 P( r. x/ n4 f  J5 d
#include<linux/ioctl.h>
/ [( m- u+ F' f8 Q. w0 Q7 |8 \#include<linux/cdev.h>
. `# b# @' l* F& L#include<linux/kdev_t.h>
: _9 Q2 L+ q1 L4 [#include<linux/gpio.h>
: K: y3 x* U1 ^5 u2 C+ ]#include <mach/hardware.h>
$ N* h8 O  v$ H, `4 U#include <mach/irqs.h>
$ F6 _5 X6 p7 p3 L! p' c8 I. H5 l% t5 W" D! y6 k
#include <asm/mach-types.h>8 _* r* ]$ |. E8 s9 y- p1 P
#include <asm/mach/arch.h>% o) n- r6 F( m3 t' u4 w3 @3 _- c% E
#include <mach/da8xx.h>
! m. e$ k) U3 f7 i#define  SYSCFG_BASE   0x01c140009 f( l. w! L+ `$ U5 r
#define  PINMUX1_OFFSET   0x124 . h& O9 e4 u* o! V( o. j. X
#define  PINMUX18_OFFSET  0x168 $ {5 ~" R- s, |9 c) e
#define  PINMUX19_OFFSET  0x16c3 L) k. U$ L& H8 R
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR7 E/ u; z$ o' @% m! B/ F& X: F
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
$ I4 d6 j: q2 v) s" h#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR+ ~6 X: K3 c* U7 _. k' |& X2 I
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
# {) |9 o; {0 J! ?) c4 G: ?#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
! Y" W' e- n) n5 i/ n9 O2 o! r                            : @4 S6 b" f* n
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR# e7 X  L3 I1 f5 s9 j& X
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
; u) x! F: x  D8 o3 ^//PSC3 G" j4 Y2 U$ P6 ^
#define  PTCMD_ADDR   0x01E27120  
( p& X5 M6 T& e3 z7 w7 ]' w, `#define  MDCTL15_ADDR 0x01E27A3C
. }0 i( x7 k, N8 P  b$ B#define  PDCTL1_ADDR  0x01E27304* R4 s' H  k& @7 A
//GPIO8 direction
# |1 N$ n8 y, ?0 `5 i$ k' E1 I#define GPIO8_DIRECT  0x01E260B0* p9 V' @4 X9 {8 \# {' ~
#define GPIO8_OUT     0x01E260B4
' P+ p$ Z% m, w" u1 ?7 m9 ?) ^#define GPIO8_IN     0x01E260C08 Q4 w# w- t* E8 t7 c; T  w3 [7 X, e
& Y2 `' O  h8 R4 \' p4 T
//#define MCBSP1_RINT    99              " C, g% Y0 Y; ~; M' H
//#define MCBSP1_XINT    100  , Z, Y/ k! R8 J! k; d% H
static int MCBSP_MAJOR=239;
. c8 d4 m  k9 [3 t2 b7 Pstatic int MCBSP_MINOR=0;
8 l( X" d6 a7 i2 T7 p  d' @  Ystatic int count =1;+ k: U: J. v* l4 [( \; W

9 m5 O0 u5 u1 x5 l$ A* }#define MCBSP_NAME  "MCBSP-device"1 @9 p; K( s( R% h

5 {* \, }/ \' |: E# tstatic struct cdev *mcbsp_cdev;; W+ T: @2 n* N* y
static struct class *mcbsp_class;
2 a/ z/ w, _# B( Ustatic dev_t mcbsp_dev;
$ Q4 |  U! ^7 ]. X; Xunsigned int DRR_data;
+ `4 H2 s, v0 }" M" h: X9 A% yunsigned int DXR_data;
) K3 x5 f6 j3 e! @/ H3 @static int mcbsp_open(struct inode *inode,struct file *file)" z* v* V% B7 q( @3 x
{
! ?# ~. j. G2 i" U; t: t1 B: }   
$ y) i5 m9 q$ {% G   //interrupt enable,initialized
( @2 h2 z; I% F9 I# b1 E& e4 A   unsigned int temp;1 R5 S0 v6 h7 v
   //SLEEP_EN(GPIO8[10])---0, h3 h1 C, |0 M8 Q% w. E
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));* k, N6 |' I$ Z
   temp=temp&(~0x00000400);
# w* F* E& X; p   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
) @- _0 n- W( W  //RESETn(GPIO8[8])----0----16 X, _' w) g0 F- B: u4 c) ]- y3 D! w9 W
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
4 m9 W( v1 _: T! @+ G   temp=temp&(~0x00000100);: q0 r# ~3 |0 H" g
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
( u$ T% `% o; h* @( }; z, E# j   udelay(100);
6 |, G$ p. [) S5 ?& a2 o   temp=temp| 0x00000100;3 ?+ P- w6 O8 Q$ c$ b! S: B
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1. Q. S+ X! w6 e- C3 v7 q
   udelay(100);
( s& U" M% D5 p7 c   printk("open success!\n");
. A/ {0 C: R+ S* B" q4 B& n% W# d   return 0;, K* c: l9 ~3 m; p4 |
}
: w4 O9 @# u( F* V
/ R& U0 I7 |8 W! s+ `7 A3 D8 c, H6 kstatic int mcbsp_release(struct inode *inode,struct file *file)
0 Y8 G9 O( q  ~( J; S' u# [% M1 Z{  @, t9 X3 r$ q
   printk("release success!\n");- M: g$ \! G3 H. q  t. {
   return 0;& `! U6 b  \. }
}
& z4 y7 S. a2 E0 y
/ T" I  b% t* K- ^static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)4 J8 i- }6 m9 y! o& e
{3 u& l# s! u4 ~. U% \1 c, ]
    copy_from_user(&DXR_data,buf,len);$ H+ j! h, [4 \* m$ x8 g6 e) Z
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
% v5 B" |: v% I0 A    return 0;1 K8 t. R# \$ F3 S: N

& }9 p. v# {: t}
/ z! ?4 F- v( n$ B/ u8 V
2 l( B  M* q9 z4 G; J3 ustatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)* h% {1 k6 \6 t. H" s* J
{ / f0 c' Q. d" @3 D- n/ Y$ r; G
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));9 V- }8 j- C; _. }
   copy_to_user(buf,&DRR_data,len); # [3 i& Q( v5 I( h
   return 0;
! n$ M. B/ j2 k8 _; s8 G: L. N}# [5 d( r+ d, `$ L( _# ^6 p

1 [- @5 v! n( Y9 w: \& P- o
( S' j; H$ }$ j. K! j3 u/ Pstatic struct  file_operations mcbsp_fops=/ t+ E( m8 T: T$ F1 }* A; N3 y2 E$ F
{/ I0 x5 [! A& b' a; g  s
   .owner=THIS_MODULE,
" e! c% L: J+ g+ C& H6 C! Z   .open=mcbsp_open,3 i( r  x7 V1 H# W
   .release=mcbsp_release,
' O4 X7 a. D1 c   .write=mcbsp_write,
5 d1 b/ T5 O* x% X% Z   .read=mcbsp_read,
+ o/ r+ P; Q3 H};) N& {' y$ ]# D8 o% P
static int __init MCBSP_init(void)
1 Q, L, S' |5 V3 V! ?+ Q{- r. b$ i4 T" i  V
   int ret;
0 m& b* l1 l! v$ H/ j% ~   unsigned  int   PINMUX1_REG_old;" T! w% A: B/ B
   unsigned  int   PINMUX18_REG_old;/ |' I, J, @* o6 z* K; f4 L7 F; d
   unsigned  int   PINMUX19_REG_old;& ]9 c; `& S! n1 y' {
   unsigned  int   temp;  6 q: d  V4 d/ e/ W
   if(MCBSP_MAJOR)
6 D" u) I: h) p: V   {
$ o. e  Y% ^" |4 S1 `$ M% m# |$ B      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);4 p; o: @8 E. f
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);! ]( J6 c4 r5 z4 b
   }. R3 o  ?7 k, a. N: V
   else  Q5 `' U" s4 R% i# W- n; ~
   {
( K1 N  s# ]% k, ]8 M      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);$ N' H) x5 O! Z" V  B" ?4 x
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
+ `& [2 E, w% q% b/ G   }( d1 S& l" U( B2 _5 k3 s$ P
   6 R% e+ j1 z2 P( R
   if(ret<0)
/ L3 n- i3 {/ B+ K3 m4 c/ t( _% O   {% r9 D4 ]: Z* p9 ]
      printk(KERN_ERR "register chrdev fail!");4 K& S" Q* P) S2 \# n# W
      return -1;7 \. D1 P4 x2 i( V* W+ V* c/ m
   }4 K" a: ^8 ]' c* |* M& K
   6 C) M2 \; E9 w
   mcbsp_cdev=cdev_alloc();
) t' s) O4 \, W   
2 Z; `0 G  ]5 M/ `1 T0 R1 d   if(mcbsp_cdev!=NULL)
$ q! f/ v1 O) _, l& _; J  Q6 X   {' V, r0 P1 C* w7 ^
      cdev_init(mcbsp_cdev,&mcbsp_fops);
& ^! C: [/ U1 c; a1 Z; D7 D      mcbsp_cdev->ops=&mcbsp_fops;( k! \, k: ]: U, `2 V. K) _
      mcbsp_cdev->owner=THIS_MODULE;
2 Y% l& X: b6 T  p3 b      % D$ X- F3 z$ l3 Y( @, h1 p
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
. _( Y8 I$ _" C) m# ^$ E- r2 B          printk(KERN_ERR "register cdev fail!");6 Z6 ?0 x) W  k
      else9 N; _2 ]: ~1 |- ]. q/ A; i
          printk(KERN_ERR "register success!\n");
& s+ H/ C  X- w- V) _   }8 _1 a1 ]9 k* `% `6 H1 c3 H& U
   else
3 C4 r; ?: P0 r2 A   {
! n, C+ J: a" N- A, W  A3 d- H      printk(KERN_ERR "register cdev err!");
6 ^* ^! U3 i/ z' g/ A8 |      return -1;
! r; J# V. C7 o3 y& f   }
& e, d) Z% t' M$ N0 b   ! y" ?! l: e- ^- h2 a
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
- ~! r/ r' x+ t% x* s6 C   if(IS_ERR(mcbsp_class)). Y/ F1 R  ~. n" R+ P
   {
; ]% q4 T2 g/ W      printk(KERN_ERR "register class err!");
( d4 E3 ?  i9 U6 G6 o   return -1;
, Z; y" {6 T3 j' [7 N! A6 u   }
7 |% b- i( u( ?: L( t. n! N5 J   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);8 W1 m2 r+ u; p8 G: S) N; }+ \

8 r# e8 d+ w- D. d$ X  Y; I   //PSC
8 B& z( p# L% v   //add Enable MCBSP$ \0 Z6 ?7 g, P2 z; F( S) {2 @
   //test
+ M  b0 r  ^  b, g% y   temp = 0x80000003;5 j, O6 d7 I2 t% ]+ ?! K* O; A
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
) m) F6 {1 u9 y; Q   temp = 0x00000003;
' k+ y4 u: k3 r( Z6 m) U" A   writel(temp, IO_ADDRESS(PTCMD_ADDR));7 K% u- V* q0 G! q/ j

* l5 h9 _1 w  O7 j9 x! E% |+ U   temp = 0x001FF201;
& E! b% l4 B- ~5 A! z   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
1 n! E! K& N- Y" {6 w( p; Y" y   ! u5 X0 j3 o, Z+ d! R* [
   //PINMUX  " @4 m, I  H' i. G# y
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,) a! ~0 z4 b" v0 w0 ]- a
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  , A' J' g1 |" d, Z5 x7 A
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   * Z2 z3 w$ o! T, m
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
. `! d' j- f# H4 g- a. p   
- B1 X+ [; t8 h) v+ N$ _  E9 e   //SLEEP_EN,EPR,L138_SHK1,L138_RC
/ z- r* @- X* a$ L8 M/ O3 S! e6 J5 e+ h! a   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
( O" ^9 Z' y) P   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
6 @- L: a0 t7 o   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);7 k) G7 f% {5 `

$ f7 _7 T4 o4 x! ?   //RESETn,L138_SHK27 a  H: e5 ]  P. P' C, `
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ; t& y# \+ x9 A- ]2 @
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ) x! p4 Q# u9 w$ v. B
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
. z' t' r) o" f& N& t; u! r
9 ^; d, R" m/ X
2 f* F' n$ B5 `: P" l/ T  o- u: J  //SPCR Register
0 b8 t9 [( ~% g) X; j; \6 p  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset/ I6 F8 R* U  o1 A& N! Z5 u6 L/ D
  temp = 0x03000000;//(DLB=0)
8 Y& M1 ^$ i) o" t // temp = 0x03008000;//(DLB=1)
0 R; `- f- i9 V5 Y1 ?( q# }4 A# B  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset. Q# s  X4 ?: L6 _. U  ~6 {, F  ^6 c
  temp = readl(IO_ADDRESS(SPCR_ADDR));
5 L% \) \9 p, K; X4 a  printk("temp=%x\n",temp);6 ~2 k' n+ u8 R# r9 C: I

- f0 L, Y' e; b) Y+ T! ~   //PCR Register2 Z0 O: ^7 B7 `5 g. t$ i
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0; \& \* n. E  q  v3 `
  // temp = 0x00000F0F;+ b6 n  d; U: Z" [$ Z3 y, T% L  U
  temp = 0x00000B0F;
7 S' S7 P" j: L0 W  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized   N/ n& @( d7 E9 c
  temp = readl(IO_ADDRESS(PCR_ADDR));7 i. l& H4 E: S2 d6 Z+ n6 N
  printk("temp=%x\n",temp);  
$ x2 F% J$ }( t7 K7 @, A# j   //SRGR Register
0 O2 ?5 f; \, o% |   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
8 u2 a2 m$ `# V2 j+ ^/ h //temp = 0x301F000B;+ k& ?" ~, d( K$ b
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 2 i  y3 N1 t+ C" d7 w9 R, d
  temp = readl(IO_ADDRESS(SRGR_ADDR));
& e6 H% s( s; u* x$ i  printk("temp=%x\n",temp);
) V' J! U7 Y" ~" e* E. b# F- Y   //RCR
7 b- M1 r5 \. q   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
* n0 n2 s* }7 H( y" m5 T   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0" B8 X% h3 B: o/ h) T# L0 M
   temp = 0x00440040;$ _$ D. x! B# E2 B
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
- l! h  a: [' {% e, O( c/ g7 U   temp = readl(IO_ADDRESS(RCR_ADDR));
4 Y- i" b7 F1 J4 [, E" o% ?   printk("temp=%x\n",temp);
2 B: L1 E; e8 v9 x4 v% H   //XCR
* a# r4 O5 ?3 [% ]: x, a4 V$ q. m   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
4 Q- h9 `6 \% C9 w4 A   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
6 g0 ?* J7 B( F( {" a   temp = 0x00440040;; x# i. C' G. M0 x% }( M" V
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   3 l3 Q6 c1 o, Y! p
   temp = readl(IO_ADDRESS(XCR_ADDR));
: X+ q* b# ~, |& I8 X% O# T- E0 o- {   printk("temp=%x\n",temp);
& W4 Z$ x5 |. Z% b  udelay(100);# e0 e+ d3 _* j7 F0 C5 J
  //SPCR Register
/ Q+ K  q, a  L! s: s1 [! ?  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
9 D) j/ `& t9 Q. I+ n$ \5 l6 }  temp = 0x03C10001;   //DLB = 0 VS DLB = 11 {. X; ~  ]3 x' G
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled3 o# g6 z% B: Z9 e! e& q
  temp = readl(IO_ADDRESS(SPCR_ADDR));5 V& k" t7 L/ o1 V
  printk("temp=%x\n",temp);6 [- ?  |9 z, e
  udelay(100);# q% [" W9 z4 Q8 }1 E, O

) \% x6 T! ~1 O' w4 k8 M  //set GPIO direction
  f1 L- c6 L5 R$ d4 e9 o; u   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));) v. O. Y+ @+ B( G4 W; W9 Q. k9 O
   temp = temp | 0x00000100;//EPR----input
, H! O* j0 s" t$ d  E   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
' k( k! s0 u0 d6 I$ L! i   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); $ j( N/ }7 g- E6 i. Y( _
- N" h$ m2 q' ~6 a/ R
   return 0;
5 F$ c3 z2 n; D}
, H9 q1 R7 S& U0 ]# N- E/ @) T9 ustatic void __exit MCBSP_exit(void)
0 H# k/ `3 z4 o+ N/ E# W6 M{5 q6 V% s9 P6 E, q7 K/ e/ S* g6 `
   printk("mcbsp chrdev exit!\n");; {9 F: o' M; N0 f* T# I
   cdev_del(mcbsp_cdev);, J* m( `$ l/ ]! h- L
   unregister_chrdev_region(mcbsp_dev,count);
: M2 Z" m/ P9 b+ c% k; i. ^   device_destroy(mcbsp_class,mcbsp_dev);
- {; Y1 H, p8 h/ u   class_destroy(mcbsp_class);) d. L6 K" w" n  a2 g
}
! w1 y3 i/ K/ k, Z& umodule_init(MCBSP_init);9 {) r; X9 a' g; ^1 V9 H
module_exit(MCBSP_exit);& F, ?/ J" U) Y. w) j

( ?, q$ X! T/ T% iMODULE_LICENSE("GPL");& N& P" N7 b) X- N# Z3 l. r  v

. z% d+ \- ~+ d  w6 R( G9 {我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。" L9 Q. ?. V: Z' Q
我的应用层的测试程序如下/ }& U. H' T+ Q* t
#include <stdio.h>: ?; ]$ j+ H/ l- W% B; c, X
#include <string.h>' |  ^' Z) H1 P7 u. O7 k& s. t
#include <fcntl.h>! \6 d# [# N; J3 Z/ s0 y6 j
#include <unistd.h>; x& I6 J. z& t! n
#include <signal.h>' H' |4 t7 k! b9 X0 u) y
#include <pthread.h>       //线程; F( T: k$ @4 c  L$ B. T
#include <stdlib.h>7 I. N* |  ?6 A) |
#include <pcap.h>          //捕获网口数据
/ {7 v* P7 {% K8 k8 t! }% h#include <semaphore.h>     //信号' O9 G7 l: r3 y. |4 Q8 N( L6 ]* I) l
#include <sys/types.h>     //消息对列
3 Y; j& X/ x6 \! d9 o9 d  z#include <sys/ipc.h>       //消息队列
  Z4 z4 B' a/ d& Y/ u' C  F#include <sys/msg.h>       //消息队列6 C9 d0 t# O! F7 O7 p; P& y
#include <sys/select.h>! l9 v9 J, R& K& p" R- `( d
#include <sys/syscall.h>* L9 L3 }$ ?3 r
#include <sys/stat.h>
0 b# R8 g# C4 A# J' A#include <sys/mman.h>" m- f' \8 s) ?- W: K: X
#define msleep(x) usleep(1000*x)6 h+ P' c0 }8 l8 y; h

. a" }0 b3 S: Y9 W. {" Uint main()  K9 s* R. B& G
{
& a5 L8 q* s( p    //MCBSP,ARM与AMBE2000交互设备6 N( u, Z9 a3 f0 u+ X. t
int fd;
" U9 s3 X# g: c+ w' V8 {- T( _ unsigned short data_write = 0x5555;
1 Z* w  v6 H/ b- {6 y unsigned short data_read = 0x00;
0 U8 ~" D- w) t1 L2 h3 l# S$ ^  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);' w- t7 @) _. [; F3 R. S
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
0 M! y5 u2 e) n. w( ~& }, T: j   
- ?* @( H/ M& g8 T+ |  q  if(fd < 0)
. T3 [6 k, \! P& ?* |  V7 q% ~  {" G; R1 W+ U) ~8 i
     perror("open failed\n");/ ?8 @  W4 K; q- s: z
     return -1;4 F) \# l9 s. Y- b" \3 P7 L
  }
+ r. M, }" d4 N) A    A, P+ i6 M7 x1 X+ S1 u
  while(1)
% y8 F! A; K3 p4 k  {
/ P; p' A0 p, `+ C5 e; [+ y1 V   6 Z: I9 q6 @2 N3 N
   //AMBE2000每次读写是24个字为一帧
" I8 c. k- J3 ^& ~   //写数据时将数据在底层存储起来,等到中断的时候再发送$ U+ j) T$ Y' h- P9 b
   //AMBE2000输入数据是以0x13EC开头的! N0 _; L7 B% O  B4 H3 c) |
   write(fd,&data_write,sizeof(unsigned short));, j! L; _: B9 w$ R% Q
   / `6 P1 a& S3 u  a% a
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
8 F# i' l+ ?/ \0 H( o  F   read(fd,&data_read,sizeof(unsigned short));/ X7 }. M* F" H- }5 R4 Z
   . x" A9 Y/ ?! S. R% e9 o
   if(data_read == 0x13Ec)4 B" L% N" A% y" r6 t
   {7 f$ _% M) ]3 E5 V, ]
   
' O9 u# w! E* e7 B5 b% f+ R    printf("data_read = %x\n",data_read);
  F( e6 v" U* n' Y- K# e, R" ~   }
% q' m. _! U. E4 ]# S' M   # e8 G/ q6 ]9 ]& L
   msleep(10);* h4 I5 o* H% k- ]% e
  
4 ]/ o9 p- l$ {2 `6 \3 ]. p  /*
/ [4 q  [' _, s2 L   ioctl(fd,1);   
' h; u* Y9 x( W- w) p$ o9 N$ P/ V sleep(1);
# Y7 B' h9 y& @) b, e/ c+ c ioctl(fd,0);& K1 O6 C+ X& n/ f* V6 O
sleep(1);
' V5 Y! }& Y1 V! v6 P1 A' o0 m */ - ^9 n: V* ?  X& x7 d; h/ b  X
  }   
4 N6 E: o+ @+ ]* n return 0;
! J8 g* I! F* ]6 h* u - g4 F5 z5 C' R
}
( {* U6 ?5 G8 e; h: j5 ?8 M+ t( m. z3 X& D2 s+ I
多谢各位指教,谢谢! 急: t! m0 R  ~* a1 x0 ^

( ?( {. b" M, I* u5 I# ~! S* |
; P$ `+ Q6 O  z: v1 U; L! D5 v& T0 N

. K; |  N6 n( H" u0 d8 o0 d; J/ P$ ]& e! u$ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 16:13 , Processed in 0.049643 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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