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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
( o; s% D3 d7 ]7 K/*/ P2 o, a9 I+ k/ B
* Copyright (C) 2009 Texas Instruments Inc5 L% x# k; J+ m: E% M
*+ J% x, W% b: `
* This program is free software; you can redistribute it and/or modify
- U* @0 W" S* c: `0 P * it under the terms of the GNU General Public License as published by
; K- P1 P1 u, ]! j! t * the Free Software Foundation; either version 2 of the License, or
3 \- G1 s6 X8 \' ~3 b5 G * (at your option)any later version.
6 A' l7 q$ ], e' p *
9 }0 |% h0 p" w" S * This program is distributed in the hope that it will be useful,) h* z/ ~& l0 n+ j/ _
* but WITHOUT ANY WARRANTY; without even the implied warranty of  k5 @3 A% \* t; K8 m4 c
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 }0 G5 l- {! W( M
* GNU General Public License for more details.! E$ W5 M/ w! s, W
*! D4 u$ S. L' N" [% i) F( c% y, M( p
* You should have received a copy of the GNU General Public License
' e/ ]) o  m6 {: G) _ * along with this program; if not, write to the Free Software. t+ }8 A* y# {( l! z# }
* Foundati9 r2 s0 m. F) p% A, K
*/
/ _/ j$ p, c9 n, J#include <linux/module.h>) m3 K# b2 F( D3 L3 W4 T
#include <linux/init.h>
/ N1 e, Z8 T. I. M: `#include <linux/errno.h>% E3 O( g2 V4 a( _7 _
#include <linux/types.h>2 d, V0 L3 v" `' @
#include <linux/interrupt.h>
. Q% c" J; B: }" k#include <linux/io.h>4 M7 k- @1 |& }3 y& r; I
#include <linux/sysctl.h>
+ N* N; N+ }: x3 U% ?#include <linux/mm.h>6 u& m& S( i" q5 v$ m  N
#include <linux/delay.h>
& d# i; l0 \3 s4 l, Z: l, }#include<linux/kernel.h>
" }* t" p+ ~! {9 i#include<linux/fs.h>/ P) q6 d0 ~5 `/ v9 @4 A
#include<linux/ioctl.h>
0 ]; K" v% h- G9 ]# X#include<linux/cdev.h>
; Y' |8 A: d8 u5 o8 [3 ~/ U0 z! ?" {#include<linux/kdev_t.h>3 W3 [( B, Y/ Q( O  v' }' K
#include<linux/gpio.h>
. V/ f! u$ t" J/ I( N1 Z#include <mach/hardware.h>! ^$ I( _8 v- _
#include <mach/irqs.h>$ d. [# B6 S9 Y2 Y( n3 @
% N3 K' e, M& T7 h# l, W: E
#include <asm/mach-types.h>
% X, T  l! b$ d) K0 A8 d2 [( ^  b#include <asm/mach/arch.h>
6 z7 N. @2 o) c#include <mach/da8xx.h>! J( ^7 b) G& y
#define  SYSCFG_BASE   0x01c14000
/ i5 D$ l, y% Z8 Q#define  PINMUX1_OFFSET   0x124
4 _+ n# a1 X0 K& `( u7 b#define  PINMUX18_OFFSET  0x168
  w& z, f) H& [! q7 k#define  PINMUX19_OFFSET  0x16c. u( B0 r/ o, x
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
1 f  |3 W! ~; U; g2 Y- e1 v#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
/ n- O+ c" W7 \: e3 ^  A4 U#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR, U# E9 Y; S" [6 H5 ^  v2 h
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
2 y$ Q: J/ h8 B0 c5 E' X2 r#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
; U  Y  u/ F$ Q) [' r/ R/ [+ W                            ! c. a# E/ I& i" h
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR4 K! ~2 D: E0 K* P9 V
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
. ?( ?  j+ ?- D1 o. k$ S4 G+ m//PSC
7 x, ~2 N9 C8 H" h#define  PTCMD_ADDR   0x01E27120  ! ^: M! [1 v: a2 [6 x- m
#define  MDCTL15_ADDR 0x01E27A3C
3 I1 w, \5 [  H7 W, Q$ I, l! u#define  PDCTL1_ADDR  0x01E27304, a9 \2 O7 w. i) y
//GPIO8 direction
+ r+ U% [4 E+ E- s9 N, A- `1 U# b#define GPIO8_DIRECT  0x01E260B0
! a. X" F0 I: v#define GPIO8_OUT     0x01E260B4. N, @. ~" F; B. U+ E' m
#define GPIO8_IN     0x01E260C0
6 f( N" k: a: g/ O. C7 y1 S
% A* N. n  P3 x//#define MCBSP1_RINT    99              
, ?) g! B6 {% p0 R; Z7 W# @//#define MCBSP1_XINT    100  
! _: G/ b# f+ c/ sstatic int MCBSP_MAJOR=239;
9 t9 G& |+ C# tstatic int MCBSP_MINOR=0;
% _; F# R4 n1 E. y/ Q4 Dstatic int count =1;
( I' {9 k/ z% [/ m( C4 E$ A) r5 z9 W) I! d
#define MCBSP_NAME  "MCBSP-device"  N; I6 i* h6 n- Z7 V& J6 A; `9 X

4 r! m& g& e5 P" `% H( X- P0 ~3 fstatic struct cdev *mcbsp_cdev;* b3 q" E* W  Y4 S0 `
static struct class *mcbsp_class;' v, m9 `% X" a/ m  U9 V
static dev_t mcbsp_dev;
; H& h& p6 a0 Wunsigned int DRR_data;
  f7 v, T' G& \, h2 \" n, _unsigned int DXR_data;/ a$ W3 u1 x6 C! v  @
static int mcbsp_open(struct inode *inode,struct file *file)- ~: n7 ]8 v1 B! E
{. s( E$ H; |+ V0 |1 k: u
   
( i% J- e" R; Q" y" a   //interrupt enable,initialized" K; u+ l$ o& N- R/ G4 {
   unsigned int temp;
+ B. F% R1 t& W) ^8 B/ W   //SLEEP_EN(GPIO8[10])---0
; Q& w# ~" S7 g+ x6 s7 l   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));* M( e5 J0 j. Q8 c7 b  p
   temp=temp&(~0x00000400);! F: P6 @" D( G! o6 r" e
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
, E' h2 q1 f1 X2 t# n  //RESETn(GPIO8[8])----0----17 Z: R  r. B$ C
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
/ c- M0 P! b8 {0 t   temp=temp&(~0x00000100);% \7 w9 f, O$ Q& I1 \  {
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0+ |1 y0 M2 J8 ?! ^$ e- ~# s
   udelay(100);7 w+ Q$ Q' V; O+ n; j
   temp=temp| 0x00000100;
  a, p* X- S' l) }% ]# \  J   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---15 T6 d) R* F! q- N) g7 t: |
   udelay(100);
9 U" J, l# a9 i7 A5 q   printk("open success!\n");  D$ F) x  H* b; Y
   return 0;4 ~7 h6 Y& ]( w. z% A; r
}
+ [/ f! C1 ^7 a3 H4 \$ a: d; h. r8 ~* d  R, }- l* w$ @  u
static int mcbsp_release(struct inode *inode,struct file *file)% w2 v/ P6 [$ U, _1 F2 t$ V
{
+ X% S; f# F3 N! m0 B( W% ?   printk("release success!\n");4 Y, J& Q0 L; _
   return 0;
2 Z; p7 `( W* a: e9 `; I" b}
! C8 W3 n" |) Q- F' l/ W+ R8 W/ G) P* Q0 V. ?/ A) i
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)2 B( h  Z! }2 p/ Z- L# P+ U
{
$ `$ @8 H7 A) t* m8 r% R6 i$ U    copy_from_user(&DXR_data,buf,len);
5 ~2 k2 s# A' J; z    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
* j- d4 R6 l! z/ `, H% y8 T2 A1 l    return 0;3 n, w' Q- @" y, X. S% F

/ q4 Q  ]$ W# ?: k! U. ]% [}
3 `  _  \- k: R. j" T$ B! f  _9 I# c  }
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
2 P6 a6 t' J0 n' b{
+ X8 W; X% I& C! v( h   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));8 x/ ^4 C6 d3 ?3 i* Q0 `
   copy_to_user(buf,&DRR_data,len); + w# c8 H+ q: W) p
   return 0;
% D3 ~' w! r# [8 L# C) ^, x}
# ~+ M, \. x; A3 A
4 D4 w6 z2 `3 K! I( J7 s% i. ^$ t0 ~% D% y% s+ D1 r, n7 ~+ ~; o* U
static struct  file_operations mcbsp_fops=" @3 W7 E/ D" o( b; }
{7 q- |5 ^% a* f5 l% @5 I! I
   .owner=THIS_MODULE,
, A: t' d- {6 k( x' Q/ a8 w   .open=mcbsp_open,# k9 _* c8 x  q% q( b9 ^7 [( \
   .release=mcbsp_release,
+ b$ Z1 S- i8 ~3 p  k, L+ }   .write=mcbsp_write,
3 G4 ~. z& d. @   .read=mcbsp_read,
: k$ G* M: \* W4 }% @};: x! L8 x5 L6 X$ y5 i  I
static int __init MCBSP_init(void)
" b0 p/ M  F5 t{  j; M6 N0 C4 J8 s$ |* ~
   int ret;/ ~7 v& s& v+ t/ ^# p
   unsigned  int   PINMUX1_REG_old;
, t! D4 E6 L/ K+ E7 i6 E$ Q, n  q   unsigned  int   PINMUX18_REG_old;! T: l' T0 j. W7 @! j; d- K6 X
   unsigned  int   PINMUX19_REG_old;$ K1 ?1 F# P" l
   unsigned  int   temp;  ! J- O% H5 T2 j" q  k
   if(MCBSP_MAJOR)2 T& v8 f- E: l1 l" |6 ]4 t9 r
   {, G. @% J' w. N# c6 X- H$ n
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);$ _( @, E7 I2 U" v! r7 q) ]
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);& c! l* n( y# \0 t/ ~; {! H
   }# E' e2 B& u8 m  x1 @) q
   else8 z. _) q5 t& R3 q3 v
   {
* T8 t. k& @/ q- N0 V- \4 o3 _6 E      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
: J( k: ]/ q. `! R4 A" Z$ y5 H! A% V      MCBSP_MAJOR=MAJOR(mcbsp_dev);. z: x  ~) Q: N; q2 g7 Y: h* O9 a$ L8 n
   }$ U2 C) ]# |8 ^
   
! y* O  d$ [& F, Q   if(ret<0)6 ]) G) J% r5 S5 c/ W
   {. y2 a& l" ^" z) s
      printk(KERN_ERR "register chrdev fail!");0 X$ T7 R6 A% R$ N: G
      return -1;
8 L8 N2 G/ Z( z   }( s' {# Q0 P& t. `4 z6 I
   " \. m* k' |# Y& `1 j$ ^
   mcbsp_cdev=cdev_alloc();$ B, W& q6 X- _; G. g- N
   
( g/ I4 V" O& h" F; E: f   if(mcbsp_cdev!=NULL)
4 J# {$ L+ v! c( m) X/ v   {
$ o  u9 {9 V( H: F% M" _4 x8 l      cdev_init(mcbsp_cdev,&mcbsp_fops);+ r; g4 m& {+ T( |
      mcbsp_cdev->ops=&mcbsp_fops;
: x2 f& @% Q3 `! E* I- n& f      mcbsp_cdev->owner=THIS_MODULE;
' J" n% r4 K) U6 y      
5 c) S  E- \1 s' x8 g6 V      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
- \7 ?. S/ t7 q/ D2 {1 d( _, X  E: Q          printk(KERN_ERR "register cdev fail!");
( C6 Q% R( m* {, }! d0 a      else$ r$ N* V: f) X# _8 s# G
          printk(KERN_ERR "register success!\n");  X$ L2 O& F- `( ?" @0 z. O/ ~
   }
# v+ i8 z! u# H9 C+ s   else
- f. @3 a3 R8 k0 J  f- {4 t  H   {
$ A* c, |. Z2 k1 p" e( Z; d* {. g      printk(KERN_ERR "register cdev err!");4 ]# Z( A. p- M9 ~4 ~
      return -1;* K4 m; X$ t1 y, `. d$ N
   }9 P$ o5 i" }( _) J" W% ~8 A
   3 ]# i! u% N5 @& c
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);/ y( m- T; @* N' o! I8 P7 b0 x
   if(IS_ERR(mcbsp_class))
* l6 B0 |/ x( |) v5 N/ l* ~   {" A* I4 r+ i6 u! s5 Y0 t
      printk(KERN_ERR "register class err!");1 t; u; C2 ?9 T% Y2 \& D' P
   return -1;
; x( t, J* s0 _/ _1 ~   }% d0 Y: t* k; N8 B
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
5 t3 [% c9 [% v$ m
' z) [3 |% h+ Q. W8 T   //PSC, B/ z5 O1 Q6 I
   //add Enable MCBSP
- Y5 \/ Z$ P9 a2 B* f' b$ o) O& }5 _   //test/ a3 i9 E5 g7 a  r
   temp = 0x80000003;
7 L' v/ q3 ~8 U/ h+ i$ r   writel(temp, IO_ADDRESS(MDCTL15_ADDR));# a0 y3 [& G+ G7 X3 G4 l# l0 v
   temp = 0x00000003;
; N' y9 g0 h' B( j  f  {   writel(temp, IO_ADDRESS(PTCMD_ADDR));& f" q# E: N4 B' `

$ p' x& N) p9 M/ [! G   temp = 0x001FF201;1 h( W5 l" A; e
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));6 |2 p* q+ B: v. m+ U
     a# L; _3 j  U4 p3 J$ Y1 f
   //PINMUX  ) k0 ^% W( g1 L( B" C8 T
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
/ [2 B; m% {' }7 f& e0 I   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
% R* d) ^; `* I. q1 j. ^' }- Q9 W   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
6 ~% ]# B# g0 |; \+ C% m   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);% B# Z, ?8 \0 y. `8 T9 o
   
, [. P4 z0 ^1 V   //SLEEP_EN,EPR,L138_SHK1,L138_RC7 h  C, o/ F" h- s$ H
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  / B2 [9 J! L2 f6 h1 U% E+ S3 }
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
# \) q6 A# \! R( \& O) O, Q0 o. p: _   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);' ]' r3 p  ^+ a. p, i
% d% ^+ Y4 Y8 m2 a; O
   //RESETn,L138_SHK2
. |% M, E9 i" f4 Y) e0 y   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
2 Z3 g' g! p, ?. p% `4 v0 w   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
8 ?/ f4 j, L3 S# j7 }) F   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
0 y, ~9 o! \& w# `( i+ s
4 g% L! w4 w! o; R) N" Q / E0 m9 m- c$ x& H
  //SPCR Register
2 }# S, F, ?: T4 A0 }' f4 ~6 m  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
! T) v$ S$ r# O" X. _9 w  temp = 0x03000000;//(DLB=0)4 M! J' U5 }' V( T3 ~; H! f
// temp = 0x03008000;//(DLB=1)
- S" Y$ ?  P& s/ l% t5 D  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
& X4 n; J8 g/ E' }: ^  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 x0 {5 f4 ]8 J9 t* n# m  printk("temp=%x\n",temp);
  v9 F* y  j9 x2 r: B4 Q ! [# C; Z! g5 I$ D/ Y/ B, s
   //PCR Register
! P) h0 ]- }2 g- V: g   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-05 q/ o8 E$ |' [& z3 V; C
  // temp = 0x00000F0F;
# O7 \4 P3 a: k" f  temp = 0x00000B0F;) @; Q. v2 o$ S+ C$ U
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized / N  P( t" U6 Z0 `+ F/ Q
  temp = readl(IO_ADDRESS(PCR_ADDR));4 D! I- p  p- l5 E5 m
  printk("temp=%x\n",temp);  
' D" A7 w' N7 H* @  B  b# j   //SRGR Register
) n0 G% S+ {2 L1 C* K   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11) ?& l3 g5 }- a% |  R; |; s8 h
//temp = 0x301F000B;. k% v, v. D1 p# z/ k1 a: n
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ; G0 Z( a: ^6 \7 G
  temp = readl(IO_ADDRESS(SRGR_ADDR));: X3 m; {% G' t1 Z( D
  printk("temp=%x\n",temp);$ }& e) S; I8 f" g: n
   //RCR
( G" J, Q9 w/ l& x$ x/ M$ `   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,: R/ P5 ~/ @/ g
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
/ o# ?" Q# j; }( J1 Q   temp = 0x00440040;
; f2 A, y% m9 L   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
2 L1 R; |; i3 d/ t- P9 m   temp = readl(IO_ADDRESS(RCR_ADDR));
" k( p6 m1 l' Q( W3 d9 |2 |4 i   printk("temp=%x\n",temp);
# R: }; C. O8 R  a   //XCR
) V3 R5 T$ e6 ~. ?   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
# }' O2 q4 x- Z/ K0 {   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0' y/ [. v7 w; X( h; X& z, _5 X
   temp = 0x00440040;
' b8 ?& u/ o/ ~' A   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   , T2 B& r. H8 ^* L. d) s
   temp = readl(IO_ADDRESS(XCR_ADDR));0 {1 T' N/ \7 d$ S! Z
   printk("temp=%x\n",temp);
  Q1 T! A& A8 y8 h0 o  udelay(100);# g" M9 J  u( @* Z% ]. N
  //SPCR Register
; I7 p2 D0 V. C+ l4 r( L& t  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
; f- C3 u3 t4 i" t1 g  temp = 0x03C10001;   //DLB = 0 VS DLB = 1' [% Q5 J: O7 @8 F' _
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
9 @* H* x, w4 u& `) \  temp = readl(IO_ADDRESS(SPCR_ADDR));8 y7 S! @, c7 E) p
  printk("temp=%x\n",temp);9 T0 `1 e- p) H: Y% ~
  udelay(100);- R1 V# D1 ]1 b+ b9 x+ g, H2 o; `
% O3 ^/ E0 r0 E( m. j% L' A
  //set GPIO direction
9 D- I0 c6 u: Q) \   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));' j# \; ~# U9 F0 z& W
   temp = temp | 0x00000100;//EPR----input
: n/ }, C0 ]0 _! [# _- d   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
4 f# k& W- k) r$ |. ?   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ) L: r, Q7 I* h

7 P/ Q6 L! e5 T3 w# o8 ~) f; w   return 0;5 T  L* M. K2 `
}
8 e4 S! W( m# Vstatic void __exit MCBSP_exit(void)
' p- Z  N- f& q4 S! O; }2 [0 f{
; y/ w2 t0 F2 _. d4 |   printk("mcbsp chrdev exit!\n");. t; R/ N9 {& W2 r& `! ]% f
   cdev_del(mcbsp_cdev);0 U6 \+ \# z8 i+ U; j9 @" n% ^. S$ `
   unregister_chrdev_region(mcbsp_dev,count);- p$ B9 z1 p" C+ i' I
   device_destroy(mcbsp_class,mcbsp_dev);3 P; _" A! n! ]' ^
   class_destroy(mcbsp_class);" V; W) ]1 d: U
}
9 j. o! Z, U/ o" Y% G& z$ o7 Bmodule_init(MCBSP_init);
) _' O) ~% O8 @! T7 I. Zmodule_exit(MCBSP_exit);2 y  t/ `! S1 ?

" T- x7 X0 M* H5 F. N9 ?. {MODULE_LICENSE("GPL");1 O+ X' q7 i) C$ K# F0 ^* r
  O5 G# b. L, x" R
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
$ V1 S' [/ n/ z" v我的应用层的测试程序如下
5 s9 A0 `$ U0 ^$ h) k& l#include <stdio.h>
6 n& F) ]& F+ M' X8 q6 {#include <string.h>" w; y2 ~4 `$ ?2 a' @3 |/ Q: l
#include <fcntl.h>5 f2 I' `, S* g
#include <unistd.h>
3 N- v% u; \; W; n6 _#include <signal.h>/ `4 k* ]. z9 O& ~) J* J
#include <pthread.h>       //线程; A: I: o( b/ R( P: R1 i% U- Y
#include <stdlib.h>
8 y# ?$ z# m6 a- o; g% f#include <pcap.h>          //捕获网口数据
; _- @: Q9 @. d#include <semaphore.h>     //信号
1 Y0 q8 Y6 ?5 C' m0 V0 P#include <sys/types.h>     //消息对列
" G8 j( Q& Q% B#include <sys/ipc.h>       //消息队列- Z9 f; b, t9 L6 ]* s, ~) {
#include <sys/msg.h>       //消息队列; \( j/ a3 Z! M' \& ]
#include <sys/select.h># n" ?+ z. e3 k2 C# [1 o
#include <sys/syscall.h>
0 v& v* D- r- k! {0 Z#include <sys/stat.h>
+ b/ ~  ?& b, M3 y#include <sys/mman.h>! W/ f. @! E% n# T5 a
#define msleep(x) usleep(1000*x)8 l4 F7 [0 c; N/ ]

. x) N2 T& T- r7 Lint main()
) i, @' b/ J* p" c( y7 C{
' q* A) k- E/ v) o1 K    //MCBSP,ARM与AMBE2000交互设备
* a! E" v% R% r% W8 R6 A3 _. p int fd;. P6 A3 w2 e- B, d$ X' K
unsigned short data_write = 0x5555;
* K4 p2 `6 d, g6 ^* f- G unsigned short data_read = 0x00;0 X4 d: p1 w' x/ B) q" M
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);# C* @( j5 {: i9 R
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
2 ]/ H3 [9 a2 o0 K  M) q1 W* m   
: W9 O; O8 r3 r' ?5 ?, E  if(fd < 0)% a% {9 ]4 B: a& U; Y
  {
& F( A. ?# h! y     perror("open failed\n");
; ?: ]: R( m+ k. m) K/ N7 X     return -1;% [1 x. C3 K1 H
  }
. h3 h0 Y( {# T0 W& h+ l9 ~  
  B7 d) ~6 u8 ?4 |6 g  while(1)
* s' F( V# v' f, P% j9 O  {
; u1 ^; [* H+ t& y) |8 o; e   0 A. W- d: ~+ y: V; A- ]1 m" U1 L
   //AMBE2000每次读写是24个字为一帧0 m: f: O& K! N! d: f
   //写数据时将数据在底层存储起来,等到中断的时候再发送
! `% }/ I  @/ ^- o. j   //AMBE2000输入数据是以0x13EC开头的
9 y* ~& j" K4 Q1 m$ F( ?" C8 Y   write(fd,&data_write,sizeof(unsigned short));7 l$ Z5 S3 I' Q" E5 K" }+ J7 X( ]
   ) j6 n* x. H+ v. T1 h
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
( n4 i1 r4 R" [5 u$ J   read(fd,&data_read,sizeof(unsigned short));( r) y) D- m# }9 n
   8 K: U$ p' ]2 _3 o4 c
   if(data_read == 0x13Ec)
. y* {9 I, r  B. E# t   {8 d6 F  R) }+ ]
   
- {; f. K' W- t, g0 f    printf("data_read = %x\n",data_read);
; s$ U1 Y1 {; @" N7 Y2 ]; `   }
6 e0 B7 o/ f+ V3 l0 b: E   
( E8 J5 l  i' ?* B) i& r+ J4 \   msleep(10);
: J! H2 `& g1 V! j' `1 }3 h( x4 R  P  9 s% P" v* K( q1 W2 `9 y2 o/ @
  /*
9 m0 Z- s( ?* D  y/ h   ioctl(fd,1);   & ~" U5 W0 W. `; P* G$ _
sleep(1);
3 O% F8 t, f, l' j' w, E3 @' r8 S ioctl(fd,0);5 H8 Q" }5 d6 {  a% `
sleep(1);
' V) w( I  t2 S; q% G0 ^4 g  F4 y */ " O* q8 a1 p1 p+ D
  }   . s/ H! S( Y2 ~8 y9 t) J' k' P
return 0;3 G/ T& s1 S, p
0 n2 k0 s- T0 ~; h/ \' B: ~. E1 {) B1 m
}2 [+ z' o! n7 F9 ~

3 ^* X" f! Y' D5 M0 z' J& H! _: n多谢各位指教,谢谢! 急  k( \. O$ {: a( I. y( [

# I- X4 k& M# b5 b
6 F1 S+ B9 ?% O) Y# E* s' B: K4 p5 H+ r* c

- f. s3 U, m; B7 c7 U# R: g5 s& J5 `/ x9 o* K) ?  \: t. N" A# B# V% g  F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 13:28 , Processed in 0.050995 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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