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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 1 T) ]  c, q* Z- ~0 t7 ?7 {
/*# v: u' V8 H  U" C
* Copyright (C) 2009 Texas Instruments Inc
7 g% E# R) ?4 K, K( V; w *: F# ^' E: N+ u6 X0 y6 c* ^" ^
* This program is free software; you can redistribute it and/or modify4 Q4 H: u6 G8 @- g' i# q! `: ^9 C/ L( g
* it under the terms of the GNU General Public License as published by
$ ^2 `, C- W: | * the Free Software Foundation; either version 2 of the License, or
- n. f  w4 X. D9 e/ s, ^ * (at your option)any later version.
4 u4 j  F  x4 r( W *3 T/ |, @9 P: U. j& C
* This program is distributed in the hope that it will be useful,& a- V# z- z) ?. J3 m4 p
* but WITHOUT ANY WARRANTY; without even the implied warranty of- Z, w! b4 z/ r; \; J/ e
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- ?6 W- `1 T6 D/ m+ X2 j
* GNU General Public License for more details.
' @4 t6 C7 l/ ^4 q) K) ~1 ] *( Q5 l2 H8 a$ ]; G5 J+ f8 S" d
* You should have received a copy of the GNU General Public License2 {! G% r- P% {. g$ ^5 m) ]8 p
* along with this program; if not, write to the Free Software
/ {& H( F+ u0 R' j6 }& q* [* ` * Foundati
4 ]6 K& M9 {/ q- M*/+ r) h7 V& A, m. ^
#include <linux/module.h>% ]# ~0 P4 `  p% T
#include <linux/init.h>7 T5 T9 Z. {) y1 {0 z7 b  u
#include <linux/errno.h>
7 }& _5 k) R$ _3 V#include <linux/types.h>
' X8 H* W1 A8 N% B4 T# ^. k#include <linux/interrupt.h>
  {( s# N" b& p" z4 z9 P#include <linux/io.h>
. h, I% _+ D. p2 P3 Q. V7 v#include <linux/sysctl.h>
' D) t  A/ c8 G5 t& ]) k! K- _#include <linux/mm.h>* V1 b, d0 z1 I; n% y
#include <linux/delay.h>
0 ?2 h' g$ Z4 i# G0 ~#include<linux/kernel.h>
3 D: i# {% j7 o! X0 c5 v4 k. q#include<linux/fs.h>
2 a$ x5 Y8 n6 @, j# V2 {' f#include<linux/ioctl.h>8 ^! V$ d, G3 A" z5 K" ]
#include<linux/cdev.h>
5 f. f3 c9 B4 D. z) t#include<linux/kdev_t.h>+ }9 d' j6 q6 j8 Y0 X% i
#include<linux/gpio.h>
2 [9 ?( E, ^& G4 c% \9 O& o- Q1 K( W#include <mach/hardware.h>
% R6 {* k, C- N$ u  V#include <mach/irqs.h>
) c7 h; s! d/ Z( ^2 F4 O. Z5 m9 O/ o0 h! r- U; n
#include <asm/mach-types.h>& z9 f1 p8 p4 X/ r; X; h$ P
#include <asm/mach/arch.h>* {( S$ q6 c6 e# r8 n
#include <mach/da8xx.h>/ |* A" ~% N2 H
#define  SYSCFG_BASE   0x01c140006 b* t: \: ]$ Y4 Z* w
#define  PINMUX1_OFFSET   0x124 # d4 j* t/ c# k5 h$ V
#define  PINMUX18_OFFSET  0x168 6 z9 j6 j4 F- j) h0 O. L% _
#define  PINMUX19_OFFSET  0x16c
" ^$ n0 q$ V% L% x' d- f/ O#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
! k; `! v$ R: |0 m" k& T#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR8 X% s/ U3 r2 x, C0 a8 t
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
4 n- T, q' ^7 l#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
9 A1 c7 H# v, j9 Y#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
9 k# l9 ?7 r/ G9 V* K- Z9 k, Q                            1 Z8 [, p/ S8 ~  p* J$ G) Y* t( L
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR) r. c/ V* T2 x( i2 e6 i, p8 f
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
7 @+ K) d5 p' ?  g//PSC8 \6 |, y4 h  g- N; Z- u
#define  PTCMD_ADDR   0x01E27120  
  n4 k' z4 i, w/ {#define  MDCTL15_ADDR 0x01E27A3C3 H/ P" N' \6 V# ?2 l+ H
#define  PDCTL1_ADDR  0x01E273046 w7 |( t: S$ p5 t" u
//GPIO8 direction  |- O; e0 N0 ^
#define GPIO8_DIRECT  0x01E260B0
# j( R; ^- K5 n$ c% {+ h3 t3 T#define GPIO8_OUT     0x01E260B4
: A$ m) {$ g  g6 `#define GPIO8_IN     0x01E260C0) a( w6 t; I, B  U' e! [" X

6 [0 X4 L8 l* h//#define MCBSP1_RINT    99              0 r+ e0 e. o6 f) N, H8 w0 L0 U! d
//#define MCBSP1_XINT    100  
3 h2 `, M8 ~+ M0 b) vstatic int MCBSP_MAJOR=239;7 s9 L  ?9 f( @- G- w
static int MCBSP_MINOR=0;
, d" n* K! S1 u8 x' a* v5 ystatic int count =1;! ]/ T! {/ q* ]/ K0 x0 v
! @7 U0 T: h4 i
#define MCBSP_NAME  "MCBSP-device"
3 n8 V$ v. g9 o, L3 ^- D
: x% L# j+ T$ m4 M1 Dstatic struct cdev *mcbsp_cdev;
* b8 |& I5 r2 p! [0 |1 T8 Ustatic struct class *mcbsp_class;
: a8 d) j# A) h; T+ x1 _4 p9 lstatic dev_t mcbsp_dev;$ N; Z' M# t. h: T9 @) M
unsigned int DRR_data;
9 Y) A% C) u9 vunsigned int DXR_data;' u) D$ X" ~2 B
static int mcbsp_open(struct inode *inode,struct file *file)) w  j3 V. c2 r  P  f
{& o) n# i- c8 h5 D
     x- w6 R7 u# k& ]( i
   //interrupt enable,initialized
6 W, y, N. S9 Q6 P  \& ^7 \3 j, E   unsigned int temp;8 S7 F/ [% r& U  C- M5 H8 X
   //SLEEP_EN(GPIO8[10])---0$ b0 C6 i- c) z: H$ s$ O/ e0 _
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
5 W" O$ D7 r8 s) t9 Y   temp=temp&(~0x00000400);
1 _% K; u8 Z3 L0 @/ z   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
( g1 e" J+ X' S+ ]1 P: a: O  //RESETn(GPIO8[8])----0----1! }9 l, Z/ i' [. O2 d* X0 }
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
- L; g* o8 G7 @7 b& `   temp=temp&(~0x00000100);/ e( v, `' T2 B+ N( Q+ t( c
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---00 X6 @, @% {. p% b: `$ R
   udelay(100);
/ _" `  o# h/ v" [8 m  D. O' C   temp=temp| 0x00000100;
- u3 X9 F7 R; w3 \) G   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---18 p) Z& ~' d- p) y  A/ @  \7 d
   udelay(100);5 j( _  V8 P. K" l, L/ W
   printk("open success!\n");
# W7 J. S) f% A2 ]' X   return 0;
  W; l5 v! N! A9 `# e}
. f2 v; h- Q' ?3 J1 _# H& F/ S+ Q. c5 i. K' M$ \
static int mcbsp_release(struct inode *inode,struct file *file)
3 O* k5 Z6 `4 }  e. ^$ d+ z2 p" Q{
! s9 i7 i  N. c   printk("release success!\n");0 b+ p3 C. {" i8 {  M
   return 0;
( U) O. s3 t& q}  x; J) Z+ {4 i8 U1 W* o
& T) }7 J! t" U& _* G+ M7 j
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)/ r+ K  l3 k8 z: Q  @* t: O
{5 N: ^  a5 y, z* D, }  u: I% B' v# M
    copy_from_user(&DXR_data,buf,len);, B6 j/ H/ \1 A0 C
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       5 u+ x. z+ m8 B4 \! _: C, Y5 f
    return 0;
  b' G; @) w  C9 _* _ 7 ~6 z! _* Q" S+ [& n! e, N. ]
}
- w7 l6 v6 {& @3 p/ d( Y' `( t  W) C, P- ?
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
6 `  T( b& I- s" c: {{ & }  p) S4 l! R. K8 j# ^; J
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));& ~" G6 M* K) P$ ~' T* m0 @
   copy_to_user(buf,&DRR_data,len);
0 l2 l+ F. n- c" P( a8 v   return 0;
% N$ \4 B6 Z7 E0 k8 N3 S8 ]* ?}$ J5 e  o) U6 N
" d. ]3 @8 ~2 Y# n  T. O
# S) k' Y4 e1 H9 g
static struct  file_operations mcbsp_fops=
: B# n& v" I, r{
  X3 s0 r; i1 u% L5 l   .owner=THIS_MODULE,
6 u3 f$ Y) ^' B  D1 m  L9 T- k; Q& D   .open=mcbsp_open,! f3 `5 t( @" B1 F: r; {
   .release=mcbsp_release,7 M7 R1 k! E7 N+ t& C1 h- G
   .write=mcbsp_write,/ F* f0 i( h; ?1 K& H
   .read=mcbsp_read,: c0 H6 N0 S" M( D3 n) M2 h# I
};
& t# V$ P9 v) c* [1 ystatic int __init MCBSP_init(void): _* f+ _1 a/ a4 A" z) R9 x- Z
{
, m& Z$ i7 T; O   int ret;! N8 x6 e) L. j0 m
   unsigned  int   PINMUX1_REG_old;( G( D8 O/ q$ D) S2 [% @2 q
   unsigned  int   PINMUX18_REG_old;2 C2 `% x; b3 u; _7 ~; `
   unsigned  int   PINMUX19_REG_old;
3 v# O5 \3 p, p' D2 d/ s  Y) m   unsigned  int   temp;  
& S$ @# a- D; I& d1 q7 W   if(MCBSP_MAJOR), {! x0 t6 d* p$ Y" o, K- }
   {* w$ ~# [0 j4 M) t
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
; F, x- U$ }) d6 U- e& A      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);/ S8 z( z/ L* h' ~! A8 J
   }
7 M, p# q6 e, r5 W# u$ Y   else
3 u: U0 ?5 J5 I6 O7 q   {
/ X* _0 G9 A& n      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);5 D3 o6 y1 H7 Z& Y
      MCBSP_MAJOR=MAJOR(mcbsp_dev);8 v# z! f& q$ P6 D/ D0 I- C
   }  L9 {$ p- V& e1 J9 T* M1 W5 w
   ; T  w& e! w  B, e
   if(ret<0). V/ ?% o+ Y; S3 g; G6 @
   {0 r  p6 |0 N  f. P& y% M, p2 P7 e
      printk(KERN_ERR "register chrdev fail!");
0 I1 D3 i# o& C      return -1;$ A5 s6 r( l. A
   }5 S! i; O, `4 K. I
   5 X4 O: ], w$ m
   mcbsp_cdev=cdev_alloc();
( E: |* ~" X: L7 Q( c6 x/ G   
! P4 U2 m8 [, C+ Z- W9 j   if(mcbsp_cdev!=NULL)
: ?: M! N3 G! q9 U   {0 b) f& A8 M0 o+ }
      cdev_init(mcbsp_cdev,&mcbsp_fops);
3 G/ R3 W5 `1 n  F      mcbsp_cdev->ops=&mcbsp_fops;
7 T* c, _% _+ O      mcbsp_cdev->owner=THIS_MODULE;0 s* G9 h- @) q+ p; B, ^
      
9 a9 }. `9 C% l* E; @% w( \      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))5 \# D5 `1 U% z6 ]( X- q. _# E
          printk(KERN_ERR "register cdev fail!");8 u& `% z* A" W
      else8 X3 f  x( m" e# V8 m7 m
          printk(KERN_ERR "register success!\n");/ Z, N* h, h1 r' I, n& ?, y
   }
; ~: ^# k% O0 G- C) ]3 D7 b   else
0 H7 o8 r; I! h% f" W  X   {$ a5 g3 ~$ z% D" q
      printk(KERN_ERR "register cdev err!");0 @, V, i  ?& Q# r. S. V
      return -1;0 e9 M' p0 U# B
   }0 Q' V+ w; e2 |* X# R
   
! L6 q& n; I. L5 ~  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
9 w  {5 J2 d* W5 d+ a2 w   if(IS_ERR(mcbsp_class))
+ \" R4 m1 D  j) U9 P% I3 F* [: W   {: i) D) Q6 ?3 b
      printk(KERN_ERR "register class err!");
, H* M  I  _6 l6 o   return -1;  Q- T  _# s! K; M- H! M: V# E
   }. q$ x/ b& X6 n: c" H+ Z* |( N
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
0 u1 U# L8 R" Q% d$ l
- r5 A, U" D5 W$ Z7 |5 s$ s   //PSC
6 ?" @0 u: v3 Z   //add Enable MCBSP
; K" {8 [( h) t3 _8 v  |, n% `6 S   //test
, c# A: y) D* ^4 Z   temp = 0x80000003;
: r0 T' l) U2 ?9 y$ W7 ]! E   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
# w9 _( R* [* d9 {% |   temp = 0x00000003;
; b. I& q7 I% b& u9 ?% o) G   writel(temp, IO_ADDRESS(PTCMD_ADDR));1 x, \$ A& s& l1 Z! e3 {" [; q1 P
! A: z1 S3 a+ }0 ~
   temp = 0x001FF201;
! p7 n& d+ s* t# y! U8 z   writel(temp, IO_ADDRESS(PDCTL1_ADDR));' f: F; O, ~( I/ ^$ v( r
   # o0 N: s3 `7 P) E% L( J2 C
   //PINMUX  
% \9 h! d* Q6 D7 m+ L4 F0 L   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,; Z+ y0 w$ g; ]! |& `
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  9 I: }: r, n2 U. @; r) T3 g$ R
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   6 k2 r: x" t$ T6 m0 r3 r
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
- X' u+ O$ Q6 N7 |3 ^/ H   
% {5 r$ i) n# X: d# `6 {   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ c9 F# w) R. J& N& r3 R2 {! G   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  $ m/ r/ v, N' G  \
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   4 S# p  y& \% ~& J9 ?1 e
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);. G& V( [2 [  K8 u2 ]

( ^' }- v) M$ q5 c# k   //RESETn,L138_SHK2/ }% X$ N0 x( y: h/ ?
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
4 a4 o8 }) y$ b, U' q3 C" s% X   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
" v/ F5 `1 M, ~& J( Q' Z" x1 U   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
" n# G9 j( K& |6 ?1 D 2 z; b* `% w+ }  {8 i2 L  y
' R& s1 J: K; T) N  R. f
  //SPCR Register- _, P/ l7 p5 v5 }2 w7 ^( w9 a
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
2 f; B. V1 U7 l) |. o* i  temp = 0x03000000;//(DLB=0)
- v6 ~) l; \% r // temp = 0x03008000;//(DLB=1)
9 u+ K/ w# Q9 d: f3 i  c7 V  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
. W) M2 s: f0 ^9 m  temp = readl(IO_ADDRESS(SPCR_ADDR));
0 M2 q) K! d& z. _& h* M# Q$ V, M8 y  printk("temp=%x\n",temp);" n& H) N, E7 h& C. L! f9 Y! `

2 Z) u2 A6 P( _* ]) ]6 ~   //PCR Register. a! D! ?" J( Q0 ]/ V1 \9 a' N
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0# E* ^  s" o- A4 u5 }
  // temp = 0x00000F0F;
8 V1 T' w( S+ e  temp = 0x00000B0F;
# I6 |6 F! h8 C  l  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 1 S6 z, j: k+ Y
  temp = readl(IO_ADDRESS(PCR_ADDR));
' X$ _5 S+ V: J3 ~/ A8 A  printk("temp=%x\n",temp);  3 F* u- z  l8 g6 U( h  Q
   //SRGR Register: s* b. t4 G% R6 c5 S: m
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11" s" J7 _5 p- ~( N" B( g
//temp = 0x301F000B;
( q- l0 B+ n0 _  e   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized - U; P" R) c  H: w6 O
  temp = readl(IO_ADDRESS(SRGR_ADDR));
, K3 E1 }, ]+ |+ b; x. \  printk("temp=%x\n",temp);
) b$ k, l1 W2 e! c   //RCR
7 S' y! [0 ^6 f   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,, A6 K0 M- l3 e* T' e2 s  `% u
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0- M- Q2 b) H9 `4 @* l* [1 K
   temp = 0x00440040;
8 ^& w$ x( l/ `9 T4 G) |4 A   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   % B1 m; ?$ K4 ?" f4 l/ a0 y/ `3 t
   temp = readl(IO_ADDRESS(RCR_ADDR));
, Y' |4 l4 T, j" e4 X4 d: }   printk("temp=%x\n",temp);
7 {2 u% U* t  `9 }   //XCR
* Q1 [  k4 {5 Z+ z# s   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
; {; B1 p1 q" w   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-09 I% P, ^3 K8 u. O3 ~
   temp = 0x00440040;, I0 R, ^2 k9 y. s8 ?
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
7 d4 g% W+ x/ K  y) b8 p' x   temp = readl(IO_ADDRESS(XCR_ADDR));
1 [6 a5 s, ~0 S" k/ E, Y: h! ]3 n, ?   printk("temp=%x\n",temp);# {1 s" M$ K9 P8 j8 d
  udelay(100);
& {% D" I! S' e: F8 Z- ~  //SPCR Register" D: @  a& l+ ?# V
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1) _) b1 |( Z0 g( I) R+ U
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
3 D! b, x( z* A. {8 T  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
# M' e8 F% [* M% u  temp = readl(IO_ADDRESS(SPCR_ADDR));, M/ ^- Z" G; T) P. [% F
  printk("temp=%x\n",temp);9 S4 c2 u" P) R1 r
  udelay(100);
# l, g" y$ q( W2 H- K, m7 D$ _( a) S" q* k
  //set GPIO direction, B$ a- }) u8 K. t( \
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));" {) E% _3 `+ z4 c$ k8 B
   temp = temp | 0x00000100;//EPR----input
/ i, t0 O  _- q  |, L: A   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output2 q# J. B) K# P( Q  m8 C
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ( d$ m% H; E- Y( i; ], n2 W1 G+ |# u+ z

( `  s  J0 o& n# }4 y3 N: r" x   return 0;
$ v/ F5 v# j9 p( ~. M# b8 X}( M; i' t: Q! D& u7 i9 B) A, c
static void __exit MCBSP_exit(void)+ ]. b' Z$ ^6 z
{
: V! _; Z* c4 \* k) B   printk("mcbsp chrdev exit!\n");1 f( A& \$ r) f- i6 p6 n
   cdev_del(mcbsp_cdev);/ r. [4 \$ l0 \" b5 B; i3 s
   unregister_chrdev_region(mcbsp_dev,count);
2 Z7 Z; v8 U4 `) d   device_destroy(mcbsp_class,mcbsp_dev);. [" w3 K) j: Z- W
   class_destroy(mcbsp_class);( a4 R1 q' @5 F
}$ r; i& l" u9 L9 i0 q9 y4 _; t
module_init(MCBSP_init);6 m& x- k) O% d
module_exit(MCBSP_exit);& `2 V% k# ?& A0 n% Y: p, i( W
: _$ G( F: o  Q8 `3 N' A
MODULE_LICENSE("GPL");
- z+ J: l/ ^, |$ V1 S0 V  C
) O( \" f( m' }& ]: `9 Q( d" V我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。: K. r! ~; V  U- K
我的应用层的测试程序如下6 E* f! Y! r$ I) t* m3 D) U
#include <stdio.h>
9 H5 ~' J5 p/ \- N+ A#include <string.h>! \/ k+ B5 o, x( Q7 ]& g: o3 j& I1 @
#include <fcntl.h>( P5 h+ l, T1 J* S$ _- u
#include <unistd.h>
" x1 H6 J) C* L: }$ s6 y#include <signal.h>
9 t1 f/ O2 d( B% A#include <pthread.h>       //线程; p: V0 }6 O. L* C" ]4 y) S* W; e
#include <stdlib.h>6 F6 U! O2 z( n
#include <pcap.h>          //捕获网口数据/ n+ Y4 D3 K: q# Z2 Y- H1 g0 s
#include <semaphore.h>     //信号
, K- l+ H6 w& E" b+ y#include <sys/types.h>     //消息对列3 a: ^4 _- K: N& a. R3 u6 B
#include <sys/ipc.h>       //消息队列
# N3 o: q- q- l/ U#include <sys/msg.h>       //消息队列
. b, [! _% p: q( L) ?9 A#include <sys/select.h>5 n! u- S0 M% j1 A% _6 x
#include <sys/syscall.h>4 _' ]' e  `- [: `- }
#include <sys/stat.h>$ Q) r) n1 F" c0 o" R
#include <sys/mman.h>; [- B0 ], ?) \- o; K
#define msleep(x) usleep(1000*x)
7 [. c# E- ^" m$ l1 F( `5 r
  [* a. Y* U, Bint main()
* b# `) e7 x$ Q* Q6 D" c( }- ~/ q{
  {% Z) L1 o  ?1 {$ c    //MCBSP,ARM与AMBE2000交互设备
* A2 ~2 t6 U/ D- ?  Y) ?: G$ M2 ` int fd;1 I! ~0 f/ t6 r
unsigned short data_write = 0x5555;5 K1 z; j* t- v; W7 }- }0 [3 \6 M
unsigned short data_read = 0x00;1 q( @2 m/ E3 L3 D; Y
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);8 q, z( G3 z7 _
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ V/ n/ p- X6 Q. g    / \: ^& b1 H8 ?5 @: D7 O; w: ?- H/ @
  if(fd < 0)
$ A# @3 g0 K6 N8 _1 Z9 o& M- ]  {
* Y1 z7 ^3 {! i4 b- R3 R' T. s     perror("open failed\n");
; ^9 V+ s( h4 h) z( q     return -1;
( P0 s( Q" D' x; R3 {7 x2 e8 O% G$ e  }
$ a  M" r3 n/ z& F  
% p  e. ^' P+ W  while(1)
/ Q3 `6 t+ Z! r  {  {
  [$ m- k, A* h5 c' a   $ d4 @8 Z/ v7 C/ v/ a3 E# Z
   //AMBE2000每次读写是24个字为一帧: ]' O0 ?. v) q1 Z
   //写数据时将数据在底层存储起来,等到中断的时候再发送
- z3 A2 v) k4 g2 Q7 h9 [! b5 q   //AMBE2000输入数据是以0x13EC开头的
" ~! m9 z' G0 U* O- N. X% w( ?2 W' H   write(fd,&data_write,sizeof(unsigned short));
& T$ t: F7 p, Y9 L, t   1 ]% r: K1 s$ u
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层    o+ _/ |! t# t  C/ `* ]
   read(fd,&data_read,sizeof(unsigned short));
, U4 B9 C: s: V' q0 w   * c: R! r' m" X8 U5 n
   if(data_read == 0x13Ec)
& L  _+ X( h, e, G; Q+ J7 |5 q" H# Q) K6 V   {+ ?) M4 k+ h' x2 }- l" n: Y7 \4 M
   ! `0 J0 ~* i2 e, ]  k" g. [* U/ g6 T
    printf("data_read = %x\n",data_read);
3 j# ]- x, I4 \  o% U$ S$ H7 v   }) X8 p9 X+ Y" w8 H. @5 q
   / g: N  t- z4 J
   msleep(10);
' a" D- P3 X& D5 f2 o1 J  
7 S: A/ `4 Z9 L4 [4 b1 Q$ h& E  /*& _9 x' ~. M! E0 N. P  Z. b1 I5 t7 m* [
   ioctl(fd,1);   9 P; Y1 l9 S$ q
sleep(1);
/ X* f/ g) M. w2 N( n ioctl(fd,0);/ {) ^  N) f  `
sleep(1);
4 e! `. I3 j: A2 {* P6 A; { */ ' N$ [# n6 H1 s( w% ^$ n7 l
  }   * @; |. k" ]  z3 V& q
return 0;
/ X- k6 ]$ ~9 O+ Y5 E9 B9 } , C6 w2 W- y: r/ i( R0 M
}0 j! \! |  U  Z
* R% }# x) b2 n% }* \& O2 ?% c
多谢各位指教,谢谢! 急, Z/ u! B1 a. Y. j8 [& [# }) m
% V! j6 a6 Z- z5 V: f5 J- l" u6 Q
3 n8 p3 a# q( S9 O2 a/ y

: K+ c( C0 g( T3 V) D, g& B3 g
' h* x, m  K( i  V1 D" q
: p5 [5 M  U0 o* |6 W' l; g. f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-16 21:35 , Processed in 0.047135 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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