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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
9 D( W/ Q' L( J4 B" v0 K/*( i) g6 c: i8 f9 S6 K
* Copyright (C) 2009 Texas Instruments Inc9 O! z# p3 w" [/ P( u
*
! b* B6 C, k7 Z' }* a0 } * This program is free software; you can redistribute it and/or modify3 C4 M7 a. c! B- w8 S4 N+ R
* it under the terms of the GNU General Public License as published by# E9 e) L9 W6 L$ x2 g
* the Free Software Foundation; either version 2 of the License, or% S. H+ [( z9 `
* (at your option)any later version.
3 V& {8 p3 p- p) D# l, B *
) t: |2 i9 d: @1 l * This program is distributed in the hope that it will be useful,
4 @2 r) s3 i' l* q7 k7 D * but WITHOUT ANY WARRANTY; without even the implied warranty of$ R6 L0 r8 u* \9 h
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ W# B, b2 b9 u3 K0 }! l
* GNU General Public License for more details.
  h3 L, Q$ ^1 j' I' r+ Q6 e *
- P8 o3 n& o" b/ [1 ?) x3 A * You should have received a copy of the GNU General Public License
. g( N. y  M# [6 j) N * along with this program; if not, write to the Free Software
6 q' t. H2 [; j% L * Foundati
  a7 L0 [) |. k8 h*/4 f6 q  l8 o9 |4 I8 M- L" G+ L) B
#include <linux/module.h>4 C3 \5 [. M7 ^& |) ~+ c
#include <linux/init.h>
$ h8 Q. f& A- i8 k5 `$ b' C#include <linux/errno.h>& F: [# [# w6 Y3 r1 }3 O; a
#include <linux/types.h>
; n* ^  J9 Z& q, _3 D#include <linux/interrupt.h>
$ ]3 q7 {* r8 m8 g#include <linux/io.h>8 A7 y3 j4 K; d, P6 q7 P
#include <linux/sysctl.h>
2 i( g7 {" ~. Z2 b#include <linux/mm.h>
6 Q8 G+ x$ n, y/ S% N* i& r5 x#include <linux/delay.h>7 _2 {$ a9 ~+ _
#include<linux/kernel.h>1 X: y! l8 Q" Q% \% `( Q- \, w
#include<linux/fs.h>$ f# y+ R) k9 M
#include<linux/ioctl.h>& @* g/ I0 T2 ?3 f) F( ~( V8 h
#include<linux/cdev.h>: Q4 _! L# ?7 f6 R
#include<linux/kdev_t.h>
9 c. x1 `! s) K$ R#include<linux/gpio.h># R+ {4 c. @% A- o. f5 _! ^6 [
#include <mach/hardware.h>1 p- G4 s# D& j, Z5 j6 r# d
#include <mach/irqs.h>
! W! ^+ o3 N* \. H* J9 y# `
6 }/ {0 L. k9 \+ y$ Q& |#include <asm/mach-types.h>% u4 X  ~! Z3 B
#include <asm/mach/arch.h>8 a% ^8 i. E$ O  ]! M( j
#include <mach/da8xx.h>
2 c# X9 `6 |* H0 ?. S7 `#define  SYSCFG_BASE   0x01c14000
5 I0 V% m' i2 {8 K5 n# X' S8 ~#define  PINMUX1_OFFSET   0x124 + Z0 v4 {/ W4 ^" U- g
#define  PINMUX18_OFFSET  0x168 + N8 N. B6 Y; |- F7 _% N0 Q  x
#define  PINMUX19_OFFSET  0x16c
  z0 t2 t. K& U5 b+ j: Q#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
6 D! Z+ e" }# l% Z) q5 X#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR0 W/ f4 d0 {2 M8 o( o
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
- `2 W( U' L6 c5 [" L1 }: K0 N#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR8 I: m: \0 m. j% ?# \
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR2 S+ P+ r! Z! g: B* c' y5 \2 d6 T
                            : B* e5 `/ o6 f. p7 I7 _* X
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
1 X1 i/ S( p! M7 n# @#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
) P/ b# X$ ^  U0 h! [+ e: d//PSC& p1 c# s& h* r& T& y' q
#define  PTCMD_ADDR   0x01E27120  % ^( F) ^* o% y  x% x; y+ m( R
#define  MDCTL15_ADDR 0x01E27A3C
7 b% ?. @5 l1 W#define  PDCTL1_ADDR  0x01E27304. B' I( s6 j& k8 |
//GPIO8 direction
+ D3 A' z5 {: J% w$ F, I#define GPIO8_DIRECT  0x01E260B0
# z! }, k  z2 {3 Z7 Y9 t#define GPIO8_OUT     0x01E260B4# N1 W8 z; U* B8 o7 ]2 r4 k" |( X* b
#define GPIO8_IN     0x01E260C0, k$ G# A- I: b6 X

, U% d; G) h7 e( j: T& k//#define MCBSP1_RINT    99              + q  X+ f" q& u" ^) [2 w
//#define MCBSP1_XINT    100  : u3 {7 g3 p) y" ?1 g
static int MCBSP_MAJOR=239;
2 {! B: t8 ?5 C3 {static int MCBSP_MINOR=0;9 A2 \6 t. w- y
static int count =1;  m- Y7 Q: G5 G5 Q0 L6 K
- ^" r! H6 {7 _. X; j  Z0 X* ~. b
#define MCBSP_NAME  "MCBSP-device"8 w" E# q& G% Z7 ]1 T4 p7 N0 w

; C7 K6 W7 p( }" [" |, ^5 v! Ystatic struct cdev *mcbsp_cdev;
, u7 a- b3 h4 `# v8 x$ astatic struct class *mcbsp_class;7 t- d7 d9 B& Y
static dev_t mcbsp_dev;6 S7 e: D$ R7 d: [: v
unsigned int DRR_data;
1 ~! n; ?5 q: P7 G5 Z  T: Tunsigned int DXR_data;
$ |" N1 W/ n% O$ [3 z9 d% ?3 [static int mcbsp_open(struct inode *inode,struct file *file)
' H' F# V( O0 e" C; D$ `{. I3 Z& Z7 l# f; V
   
0 S( P3 r' v! f% ?' f8 F+ X   //interrupt enable,initialized
) Z8 w- D$ a: t: O" N   unsigned int temp;( j" ^# U/ `! H# `* ^, M
   //SLEEP_EN(GPIO8[10])---0& i+ \1 S' G" [0 ?
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
. D0 C  x0 c, r   temp=temp&(~0x00000400);2 d' v- s; G1 g6 j, X
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]# s+ x0 a4 C: r* _! X9 [
  //RESETn(GPIO8[8])----0----1
% B2 ^- r, [3 {# a   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));5 M5 t2 R+ x& U1 U+ z$ Q
   temp=temp&(~0x00000100);
; a! a1 ^9 f. M! ~& D   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
& l) f4 H7 [/ l- A$ P+ Y" k   udelay(100);1 ~: Z1 H( L3 l- R- q
   temp=temp| 0x00000100;
  w+ }# v( @0 Q' |4 y6 b) C   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
1 H* A2 F! T) H   udelay(100);! E8 [: V/ \& U6 s9 v: N( t
   printk("open success!\n");, ?9 n/ Z( z. m4 R0 n
   return 0;
! _- N( f4 h. Y% J5 B}! [+ F& ^2 P8 @$ v9 C
% u2 M. f. }& R
static int mcbsp_release(struct inode *inode,struct file *file)6 C: m0 d. |: \" E
{; M; C# y. |5 U" P4 d% a6 j
   printk("release success!\n");; B/ J: v6 @4 K: v( B- Z
   return 0;; o: |+ z2 q0 k/ D3 `
}
$ @2 q1 v) N( E# P0 v
+ d+ ~* A. A8 {% h7 wstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
' U9 e" D+ Z$ _: e# z{7 H) x% z; @4 K
    copy_from_user(&DXR_data,buf,len);* [% H2 q, U. D% _
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       8 u7 z3 K5 y( J" J9 n  V
    return 0;
; ?9 p* v$ h* J! I8 H2 f" M ( x0 b" Y9 H) \
}, i- X* T8 l( d; x# a# e

) J; b6 p3 q# U# s" A5 Qstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)* O* V5 G0 C, f$ w6 Q
{
& y9 ?) N( C  X# s   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
& a2 ~0 P# f$ X+ c6 P6 E   copy_to_user(buf,&DRR_data,len);
2 q0 Z0 `0 R5 z$ S! G! O   return 0;
. U( S  T% b8 G  A; y}
; F% _) E+ I6 N6 t8 d  _. ]. B; ?1 w! H

- ~, e; F: T5 J. e6 A9 N' u8 Vstatic struct  file_operations mcbsp_fops=
! k1 P0 F+ a$ O% e{# |4 C+ D2 n6 S' w2 x
   .owner=THIS_MODULE,
% W, A5 V) @$ G   .open=mcbsp_open,
( R* ?: P5 v* J1 u$ S2 S8 P   .release=mcbsp_release,
3 }+ e, Q+ F; F, o; O# y. x   .write=mcbsp_write,
  K7 y/ r6 {3 L' C$ v   .read=mcbsp_read,* [* ^/ [  J* N  k  H9 C, v
};
+ q* i+ H" U4 o1 e9 C1 Vstatic int __init MCBSP_init(void)
- N- W% W0 W- Y- V0 p( |/ @{
+ O1 ~# r+ e  D4 ]% H0 ]- z6 ?   int ret;3 u2 S# B6 ^8 }; o- x  f
   unsigned  int   PINMUX1_REG_old;
/ y, J( f4 b- |5 m- M* a; Y   unsigned  int   PINMUX18_REG_old;
- L0 j0 E" y+ D6 L* o" f* b; m   unsigned  int   PINMUX19_REG_old;" W0 g3 Z$ K# g) R& |
   unsigned  int   temp;  
' S0 w! x8 ^0 W   if(MCBSP_MAJOR)
4 Z+ j, I) A3 g) r' g9 q   {' w' ]) ]# G# T# M3 j
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);3 I" {1 z, j0 X7 s- ?5 }
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);- T* P0 c: ]% U3 S9 {; a  \4 T$ f
   }8 W+ q. f# F7 N4 W; N
   else
: T1 \! ~$ t0 u   {' h, q. D+ ~* k. j* k
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);: s+ z: ^, P! N# U0 D3 {
      MCBSP_MAJOR=MAJOR(mcbsp_dev);: W* r. B& [- _: w" U8 C# a
   }# l' z" O( h+ h& n/ k
   
* U! U& w% \5 D+ S! T   if(ret<0)+ H2 j, X8 P. c0 @, b0 V* j) e
   {$ Z" Q9 \+ a0 D
      printk(KERN_ERR "register chrdev fail!");. Y3 u: B0 I2 W) o  N. k1 Z
      return -1;
$ X& u& _# q' W- Q" \   }* C/ j  j2 G5 N* \8 _
   7 f; X" T/ m- f$ S. h+ y
   mcbsp_cdev=cdev_alloc();5 O0 _6 o1 I) O3 g' c& U
   % f5 ]9 s1 `% u& O! z8 _8 s* W
   if(mcbsp_cdev!=NULL)
+ O- i0 d& p3 h+ \5 N   {& U6 s+ `5 i+ B+ w. a, {) {. ^
      cdev_init(mcbsp_cdev,&mcbsp_fops);& }. E& P" _* K
      mcbsp_cdev->ops=&mcbsp_fops;
$ ]. _$ i! M4 D0 u1 W      mcbsp_cdev->owner=THIS_MODULE;" o8 G* c) ?! ]; R$ |; C
      + c6 W3 L2 x* j" V
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
' k( S. O8 X# C& W% e5 [          printk(KERN_ERR "register cdev fail!");
6 T& _1 m" O7 y0 ^      else
/ ~+ L/ c' o6 ~, V% X          printk(KERN_ERR "register success!\n");
: N( z$ b1 o% ^  ~0 v8 u   }
' Y! |! Z! j, O5 m   else
. z$ ]" Z# G) V3 \) |   {
) S0 K. \: \: B6 E      printk(KERN_ERR "register cdev err!");$ ^# Q1 s8 S( S, `% M
      return -1;/ O* `7 ^4 ~9 h& u6 s" h
   }
8 l% o$ {. V: k1 E; ?   
$ y$ Z% r- i3 o1 g7 @  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
2 Y" t: ]& }# s  W1 ~' Y   if(IS_ERR(mcbsp_class))
# e/ y: V5 Z1 M2 d6 X  x   {
" f+ E+ z: e, l* |) k+ Q" x* Z/ c      printk(KERN_ERR "register class err!");
0 Z/ f3 b* s. f; B4 Y1 q" y   return -1;5 G0 R6 V* ^8 L3 b
   }
' \3 V3 J: e/ ~' }   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);7 z- j' `( u7 ~$ R6 V

, I- |, a: ^. K! g, X8 s   //PSC
/ Y) o0 I  Q( L   //add Enable MCBSP0 B6 s+ v0 N- K) B0 C5 Y1 [
   //test4 L' P" X; n, w
   temp = 0x80000003;
+ G! @# X8 O& r) M6 Z; N   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
$ m; I! Y' J3 t8 E  ^1 y6 }, D   temp = 0x00000003;& e: E3 Y. E8 k/ L, }9 v& k7 F! u
   writel(temp, IO_ADDRESS(PTCMD_ADDR));  q4 X: l; i5 R5 |

5 Q/ N% X- L9 E! V$ }# Q! I9 F3 ~4 r: M   temp = 0x001FF201;
9 W% \# ?6 p  l3 ~4 a0 q   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
- {& a# l. p5 q/ f8 e( S" F* d   
* D) [( Y  L1 [$ C5 H   //PINMUX  
7 t/ i1 g- {$ d& P% B8 T1 e   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
; K# @5 {4 a* }# ?6 W) u   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  & E& k+ g: c0 y; W/ d9 z( g; C2 K: Q
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
- y! k, j' j1 Z- G) `" Y1 M2 b3 w   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);' y' H/ M- Q% T* ^2 G6 F2 f0 J
   . N: i8 |0 f: o/ B0 e0 m: n
   //SLEEP_EN,EPR,L138_SHK1,L138_RC7 ?$ ^. D: L- a' \1 c
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ' B; b) a  r- X0 K8 N
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   ; k& q) `1 ~/ z2 s. S; D1 B
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);4 M. n- r4 L- x

% O- l7 B' `0 S3 A7 V   //RESETn,L138_SHK2
6 g% E" x' d1 T$ K' z* I  f3 ^1 c: ~   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
' L; i2 V- ?0 C- D% S6 e   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;     }% r' N+ X; T. ]) {2 p5 n
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
, c1 a9 O" E* u- Z0 G, `
7 L' q6 G; d/ ^( c) k& v( J0 q) W 5 Z# Q- X  A# |8 J  {! c/ q
  //SPCR Register
5 U* {. z& j  P  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset% u$ H( C7 N4 K$ f( U4 G
  temp = 0x03000000;//(DLB=0)
5 H; V3 T5 v% G, C5 y7 I // temp = 0x03008000;//(DLB=1)7 }+ Z; t4 P, S: G0 g( x) C5 `- n
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset5 p4 u8 `7 X$ P( b) ?6 ~2 g
  temp = readl(IO_ADDRESS(SPCR_ADDR));# ~/ K' `) c- s8 \* U! \+ N
  printk("temp=%x\n",temp);
% G: }  G# h0 l( {; y8 x4 f ) Y, {% Z: j' {9 |' T7 H
   //PCR Register' x2 p& p$ v; }% N
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
/ v  `+ R  s/ h  // temp = 0x00000F0F;  I3 J8 F/ C' p1 x( D. Q* m
  temp = 0x00000B0F;
; R! S5 n6 f/ L  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ! b6 p0 o: q" L2 b! A( A
  temp = readl(IO_ADDRESS(PCR_ADDR));
$ Y. l; D' n  B" ~( v# m  printk("temp=%x\n",temp);  
6 ~1 x) _8 N7 m. M, F# ^   //SRGR Register
* Z% ?8 l* p: h5 A  U* J   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
; g8 i0 u) M9 n$ g //temp = 0x301F000B;2 b% k1 |  _. }) a* S
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
( q5 u8 H% S) t$ P/ j# }, J/ \  temp = readl(IO_ADDRESS(SRGR_ADDR));" o& |' l0 p3 ?0 R8 a
  printk("temp=%x\n",temp);. L! n( n9 q9 F4 O0 H, t* \
   //RCR
) I( B7 P+ q/ z: g' n' E   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
  N& g! k! j) c+ l" w0 P   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-02 `0 U9 F* e, w: m
   temp = 0x00440040;3 Y( a* W0 y3 Q
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
& k3 ~$ r6 Q2 ~4 ?' ~- m2 O( _   temp = readl(IO_ADDRESS(RCR_ADDR));
5 W: c, }. e" B" s3 g) F   printk("temp=%x\n",temp);' G9 n6 t$ B- u8 r- @+ ?
   //XCR  C( B! d& p5 u" i# B
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1" o% |; f; M4 s; d* [, }+ D
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
3 b+ d3 T% G3 o& C6 ^) h0 Q   temp = 0x00440040;
& `% d- d8 Z" ^9 W, y1 D+ g6 z   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   & J+ D) |6 [9 F& L) L. B
   temp = readl(IO_ADDRESS(XCR_ADDR));  B+ t: Z3 f( G5 E4 x3 k
   printk("temp=%x\n",temp);3 C3 ]7 V. S8 h
  udelay(100);
( ~0 d5 |6 m; ^* m  //SPCR Register
7 h3 H; c8 t; B& C7 e: ]  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1) F5 q0 b9 E& @
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
; ]5 d0 l% w, L, U/ R, Y  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
' O1 ?0 Q' w6 w0 {8 Q- c  temp = readl(IO_ADDRESS(SPCR_ADDR));
; X) U. O; v) c0 `. Z2 D0 n; G  printk("temp=%x\n",temp);
* B8 c" U8 }1 s. r* m4 H1 z  udelay(100);
4 d3 {* p9 w1 E. g- {
9 P) T1 y, S; Q- R, J6 n) {  ~  //set GPIO direction5 [: O- N2 s8 X* c- V
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));4 U% E# P8 z, h# r4 |
   temp = temp | 0x00000100;//EPR----input
/ w! N+ c: \" L: k3 O) D* M   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output9 Y6 j6 `' o/ }+ ]% t: @6 D% ~
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));   A' F& g. B. M7 k3 u0 x  d
. R* r/ F# g/ R" D8 a- ?0 ?
   return 0;6 o  d$ ^$ _/ T* z/ f/ W
}
8 b0 ^( K2 }" [. _& A8 e5 |static void __exit MCBSP_exit(void)
  r1 E6 ?' i6 S6 ]  Y0 u{
. P  G6 G! B  N$ i   printk("mcbsp chrdev exit!\n");# R! c- R0 @' s
   cdev_del(mcbsp_cdev);& e, d* ]& ~; ?$ {: o/ I
   unregister_chrdev_region(mcbsp_dev,count);# Z4 ]* t7 q& l
   device_destroy(mcbsp_class,mcbsp_dev);7 T* V( {! T2 [
   class_destroy(mcbsp_class);. b( Z  G4 B$ I- e" m
}' c+ u; |$ u6 B( y
module_init(MCBSP_init);9 g- {9 E" A5 u7 g& j! h
module_exit(MCBSP_exit);+ O( i, U1 Z3 Y9 W

3 A1 d* A8 V  N6 X% pMODULE_LICENSE("GPL");
7 s2 i/ }- @  j
  J% S& l, p; z& H+ m我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。! @! e5 a" v+ p
我的应用层的测试程序如下
" P5 J5 [- t; M5 B5 m" ^#include <stdio.h>
! n3 `9 t7 c) u  F#include <string.h>. i* S( c) T$ J
#include <fcntl.h>, G1 ?; ?$ r# p: p3 Y) Q& s2 v
#include <unistd.h>* U/ d8 C% j& _
#include <signal.h>
  a- d' b) i+ R/ x: ~#include <pthread.h>       //线程
" G. d/ b- `- C6 e0 f; U* H4 t#include <stdlib.h>- [5 b% H" I& w5 ~7 C  F- m
#include <pcap.h>          //捕获网口数据
9 F; r& q2 s, o9 T* k5 X' |#include <semaphore.h>     //信号
& k- p( a5 r5 F, e. g#include <sys/types.h>     //消息对列
& T! F; ]# g8 @  ^#include <sys/ipc.h>       //消息队列
# i9 D9 q1 a9 H" Y#include <sys/msg.h>       //消息队列" A1 U: v8 `% a* {# k6 c( X
#include <sys/select.h>6 S% K* Z6 Q& r5 ?; e
#include <sys/syscall.h>
8 t4 E" y* ~2 x; H" Y#include <sys/stat.h>2 |7 G& B$ k" t2 |: Y' e  o1 m
#include <sys/mman.h>3 Q% b* C9 A; O  L) l
#define msleep(x) usleep(1000*x)
' s7 t. z4 D! x' N
2 H/ B% R4 U) D* A  K6 ^int main()  x7 T4 I4 y! j4 o8 P* m4 v
{ + P; W2 l" C! T$ {; V
    //MCBSP,ARM与AMBE2000交互设备
" X) E8 f4 c& O int fd;
( r* f& ~% o5 U% [9 b5 j5 b unsigned short data_write = 0x5555;
* x8 m6 b: Y% z; N" m6 A unsigned short data_read = 0x00;
6 S% u% [/ h* K- m2 u( k  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
& z) }8 \$ K+ `# O //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
& }; z- y+ H" E0 K) [1 n) G. z$ a* n9 K   
) u6 D8 a( [0 A/ ?/ l6 H$ @  if(fd < 0)2 F6 q  z, x, J) w% `( P3 O) k
  {
7 R- K$ j; m6 D, c" U( t     perror("open failed\n");
: |0 s5 S! g% X6 Y" _# v9 ^, z     return -1;
6 u& r7 Q$ R% N+ [  }
) Z8 \6 V& z- F1 g0 L( Z4 i  
8 H* P, P  @! a, B  while(1)/ G- O' u9 {2 Z. Q8 j6 h1 g
  {
. l3 D1 K+ J6 I* Z   . M5 B7 H9 v- S$ m* J5 a
   //AMBE2000每次读写是24个字为一帧0 U9 P) F+ N: h6 j* N8 [
   //写数据时将数据在底层存储起来,等到中断的时候再发送! o2 B. S6 \! d
   //AMBE2000输入数据是以0x13EC开头的" w1 i# L' V5 B7 }) j" h" ?; j
   write(fd,&data_write,sizeof(unsigned short));
; B4 ^/ z6 S5 o, L* T" F  U* e   
" h  F$ I7 W6 ]0 B7 g! X' ?. H   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  * n3 q. E0 [. ]% R  |3 F
   read(fd,&data_read,sizeof(unsigned short));
# ?. v) \: Y8 `     w) ^) @* m& M& X3 Z
   if(data_read == 0x13Ec)8 M8 W% k+ A9 k/ l0 I+ p
   {
; r4 p! L0 d* g/ P   ! {; Y( s( J+ g; k4 ^4 w; d, q3 g9 h
    printf("data_read = %x\n",data_read);
* L3 g, R( C. q1 v   }: J; g% C9 p* g& Q6 G( P* l
   
% t, c5 k+ l+ o' t! x  z2 {( ?   msleep(10);
" j" s9 w' ]4 t* H; D, y5 `9 J  2 f+ f' l( l5 p2 F) j
  /*$ r; s( g+ B! x6 Y; f. p1 c& Y2 y- v
   ioctl(fd,1);   
* K  u% ?6 a/ K0 c% ?) }6 A sleep(1);
7 a% {3 C2 l6 U0 H. W1 f: _ ioctl(fd,0);8 d' n, w) a+ X3 c& p; R
sleep(1);8 B6 x6 Z$ S) t
*/ ! T' d$ V2 \$ D
  }   
, i, z$ e8 x1 `5 E! X return 0;
5 j$ }( L" ]; u# c" b3 e9 |4 q
1 y0 A9 ^6 B, I# y9 ?: z" a}  x* p  U) J# \( f

' T# Q9 E' t6 p7 ^多谢各位指教,谢谢! 急
% w) ~/ g* o) v  _3 r8 G6 x7 x
/ S. d6 [% w( A. Z, W! S1 T8 @. \* N; ^9 F" ^  a$ {3 @" b
/ V' o, a" G. S0 M- w, b3 B

& h+ h5 v9 Z; w- R- K2 ?' f4 {, c" T+ j) D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 14:55 , Processed in 0.049566 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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