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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
0 `5 f& G& ~2 ]+ B/ s$ z/*
: N4 X' a1 T! H7 m. I7 O, Z * Copyright (C) 2009 Texas Instruments Inc( M% K& a8 p' j/ J2 o
*
- f( _& e9 a" i) E2 A * This program is free software; you can redistribute it and/or modify
+ ?- p4 I4 M! f. o9 D4 j* E * it under the terms of the GNU General Public License as published by/ [3 U; B$ Q3 X( a3 o
* the Free Software Foundation; either version 2 of the License, or
2 E: m/ p4 f9 D9 n" B * (at your option)any later version.8 b9 ?, ~* A9 P& l' R$ A) K
*9 m6 i+ {/ K* u1 O, h
* This program is distributed in the hope that it will be useful,. T% J/ Q" p- b7 m( K( U  g  @' B
* but WITHOUT ANY WARRANTY; without even the implied warranty of8 H# R  A4 D3 q, C6 i
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ ^/ y' a4 k) B& D
* GNU General Public License for more details.8 [& T5 g- w- H# _% A
*
  R$ @: f" D& x7 Y$ e9 l * You should have received a copy of the GNU General Public License. p+ S6 w- ]. K
* along with this program; if not, write to the Free Software' Y9 q7 b# v% ]; t
* Foundati
9 [, U* N7 n3 t( V- D*/. Y) F3 u  o! X
#include <linux/module.h>% t6 }/ V# s7 Z
#include <linux/init.h>
* b. f- f4 f0 a  i#include <linux/errno.h>5 \5 Q% B' ?3 W4 i$ e
#include <linux/types.h>- r/ D5 ~* I  E9 {1 I3 m" }
#include <linux/interrupt.h>
& p0 n5 D3 U4 K. \$ }9 H* m" @& ^1 e#include <linux/io.h>/ }0 \2 D% ^) t7 C' F
#include <linux/sysctl.h>8 ?+ A5 B: G5 e( s4 t6 b. M" P  z
#include <linux/mm.h>3 D8 U# Z5 a% {) A  R4 d$ n
#include <linux/delay.h># v" l" Z- }' R
#include<linux/kernel.h>
2 _7 [- q2 Y( l" [5 \% q4 T#include<linux/fs.h>/ y1 s) h/ ?+ z7 o+ X. _  |
#include<linux/ioctl.h>/ Q, Y3 J: B* Y0 o8 `2 K0 f
#include<linux/cdev.h>
5 B( H: d  K' x! T0 \' G#include<linux/kdev_t.h>
) Z$ V8 _4 V8 X# R) [#include<linux/gpio.h>0 k8 d$ \! i, J. c& |
#include <mach/hardware.h>
& r/ J" e. J& M- O1 ]#include <mach/irqs.h>
! g" S5 g3 a' U0 b) p& G
* y. g! B& l6 F5 {6 t! D#include <asm/mach-types.h>, k  b  ^3 u/ C# P! W% v, H
#include <asm/mach/arch.h>5 }, i) v, K7 H
#include <mach/da8xx.h>
6 N6 [+ h* @" f0 e0 T#define  SYSCFG_BASE   0x01c14000
5 {9 K1 ?; q9 h' H/ {#define  PINMUX1_OFFSET   0x124
3 h1 M, i. {" l1 e5 h#define  PINMUX18_OFFSET  0x168 . p4 j0 z# G2 I8 T7 [8 z
#define  PINMUX19_OFFSET  0x16c4 V0 a# J6 B- l: L& g
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR1 Q8 r0 t& v' }
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR8 A4 N. Q+ @. W9 I
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR3 A- J  d7 c# S+ Y! n
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
% @, B% X6 A0 ]6 ?#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR3 N4 X' C( e1 v# D0 ]
                            5 ?( j# E! I- H8 j/ c, W: |
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
5 t/ ]/ h8 a- K+ r% r" [#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
9 G! k$ t1 v8 e2 p$ d* l//PSC
6 L5 H7 M' w: L# q( ]# G#define  PTCMD_ADDR   0x01E27120  
: G) q/ ]. B( N0 T. B6 }2 Q#define  MDCTL15_ADDR 0x01E27A3C0 Z# G. B  n; I3 E2 ^) M
#define  PDCTL1_ADDR  0x01E27304
; H, e: F( g. b* Q) q9 [//GPIO8 direction
6 S8 O. y/ `: ?, p& D#define GPIO8_DIRECT  0x01E260B0' |  R# R) Q2 b0 g3 |# ?1 {
#define GPIO8_OUT     0x01E260B49 n& a' [8 L) ]  m4 x
#define GPIO8_IN     0x01E260C0
' i8 q( L. X; `5 Q1 Y* X, e" _4 [$ R
//#define MCBSP1_RINT    99              + a3 F" V4 A; w8 Z4 y, o5 N
//#define MCBSP1_XINT    100  
, K- B1 L9 e1 S9 z. ?) ?static int MCBSP_MAJOR=239;
4 T- R7 q: h7 b$ o% V; Gstatic int MCBSP_MINOR=0;8 L2 b! w! F2 b0 d
static int count =1;7 h' g# y$ B2 x: s  n

: L, ?# t: W. {' Z' U) w#define MCBSP_NAME  "MCBSP-device"
* R2 x7 q6 ~* K6 g9 v' g% L9 F9 p2 z% I6 O% ~  Q  `$ Q0 j* m  u
static struct cdev *mcbsp_cdev;9 `% E! b; _( S
static struct class *mcbsp_class;
  ]& y0 H: o; d0 w# Fstatic dev_t mcbsp_dev;) N/ G' d1 j1 K6 t; f' O
unsigned int DRR_data;7 I5 j8 W- l1 m' H; o
unsigned int DXR_data;9 F  n7 b/ R& h5 w% z( f/ c1 \
static int mcbsp_open(struct inode *inode,struct file *file)
3 ~+ H3 r9 w2 Q5 N{2 U9 [7 _: p+ F3 \: r& e
   . g3 y( W5 D" b' b5 \
   //interrupt enable,initialized
/ D2 M2 Q$ D, ^1 m   unsigned int temp;; T+ [$ C8 A( u! l# A& t2 }
   //SLEEP_EN(GPIO8[10])---02 V/ _) Z+ w/ }7 W
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
! q/ P* p+ F  P+ c8 L   temp=temp&(~0x00000400);
& ?7 C9 ~/ a1 L   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]7 c! [' D) v7 o
  //RESETn(GPIO8[8])----0----1
- Z6 f" M# n: A/ j* Z# d   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));  \* y* X2 r/ B, Q( {6 ^
   temp=temp&(~0x00000100);: R+ |) V; m, d; B" [% B
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---09 z9 D& Q) w1 R4 U
   udelay(100);
; G+ j/ ?. r. e  T   temp=temp| 0x00000100;
% U( F7 p6 N7 X   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1# G4 I. M* ^( b
   udelay(100);( X: K3 W! w+ l
   printk("open success!\n");! b! a( o$ z( K' m4 W
   return 0;+ W. f+ B3 L8 b) K; y
}  O% A9 c3 S7 ~. W7 C1 B
1 i; c: ~: |# X
static int mcbsp_release(struct inode *inode,struct file *file)* \' w9 r+ S, ?: }' b, B  |
{- i1 E# R8 V( ]. ~2 N. H/ H1 [
   printk("release success!\n");
6 H; Z* r4 J; O, X9 d& A* U   return 0;3 w! m/ k4 h" E9 @6 ^9 t' ]
}
6 w& x9 Y: |. ]' \; a; Q% R- E! ^5 q4 e% H( v8 q7 X
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
$ u) l. n+ Z; I{. Q$ x2 n! u2 X2 ^! W- v
    copy_from_user(&DXR_data,buf,len);
# Y8 j' ?. N! G( w    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       3 q. C" O( g2 D0 j
    return 0;
0 Z9 q* K+ W& M; @. S0 ^
/ q* |9 C$ O. t- |9 X}- M6 @7 @- b: K: E# b6 E) A
. f( E3 z1 t( \7 i9 I* u2 Q
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
3 D, T$ k$ R: a8 q% O  N{ & V+ @* Q& w# s, W! t7 N. k
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));7 W2 j+ U+ r1 B2 f  ], t! U0 L
   copy_to_user(buf,&DRR_data,len);
7 R- ?% X. w4 m% F5 v4 P2 T   return 0;# M: H. E0 p% m' u
}
6 g) y* R! ^) N6 R/ d. V5 b1 z. k  {3 f5 w6 I6 p9 I- y
# q  J" \* W3 z/ m& u( Q8 B
static struct  file_operations mcbsp_fops=
: P( o* J' ~" n! h& x" B{
3 f' d, A8 [9 ]% m   .owner=THIS_MODULE,
+ E7 ?% j9 D7 e; m  |! k   .open=mcbsp_open,# u) V2 x; k- K$ U: q
   .release=mcbsp_release,1 H6 M4 b! L5 e2 w( v
   .write=mcbsp_write,
" o* R) f; B+ g0 {$ r' r   .read=mcbsp_read,
: o3 P! {8 b( m6 L: i6 n};: `. b3 k7 v/ }/ S; n, L
static int __init MCBSP_init(void)
! _( J' e% a1 M7 {! m{
9 I0 }3 |9 L6 Z8 _, c; E$ P2 ]   int ret;
. j; M) ?4 R+ A: v9 O+ g  ]# @! G   unsigned  int   PINMUX1_REG_old;" {. u2 z+ M3 t* I9 u+ W+ R0 Q
   unsigned  int   PINMUX18_REG_old;
: J: v2 N, y1 n   unsigned  int   PINMUX19_REG_old;$ G' [& L/ h4 B* _9 ^
   unsigned  int   temp;  * Y& g: e8 `5 M7 z6 ?" X0 l  K
   if(MCBSP_MAJOR)
! c) P6 q* s' Y/ _  s- l9 r   {+ r) g* i" A3 m+ a  B
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
! t3 I+ O% [+ r2 P# S6 k      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);$ F; o4 G% p* r0 |$ F4 g, B
   }
  ~8 n; o6 p2 K' e   else  n7 V4 a) ?2 [) Y
   {& f1 }7 W2 Y- B) A$ n9 t
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);4 u1 K; Y0 {6 X! ~% j( [: _
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
3 @) L6 m, P9 r7 M2 i' d$ [   }
# N& |6 N* c0 v& D* C% z   - E/ `, u3 b; A1 `" @: o
   if(ret<0)
: |: L5 I1 ^7 F# k   {
7 T7 D0 o; ?) P$ K5 O3 w      printk(KERN_ERR "register chrdev fail!");
1 u0 P" [$ h6 D7 Z  H6 O      return -1;
, C( K4 V+ b" B2 p   }
1 {6 K6 q+ `+ g   : I9 f' V1 ]8 s. _' E' X6 @% b- {
   mcbsp_cdev=cdev_alloc();
( Y8 Z1 Y+ B* i! i% k. t2 D   
4 y  F7 q0 g5 f  p9 W9 d% F5 l   if(mcbsp_cdev!=NULL)
( X! }0 P% j6 \  u( I# r' i* O   {
1 a% Z! _4 R5 e8 V7 m4 P      cdev_init(mcbsp_cdev,&mcbsp_fops);1 K' \% p( J+ L. E
      mcbsp_cdev->ops=&mcbsp_fops;
) ]1 S  `) P0 C# m( p      mcbsp_cdev->owner=THIS_MODULE;0 n% }# V4 t: ~
      
9 H: q+ g, Q5 ?% P, ~      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
/ j, N& P$ f& \- v          printk(KERN_ERR "register cdev fail!");7 L. u2 O% W; Q) f/ x
      else. D" z/ D9 Y' O+ e3 Z* x7 b
          printk(KERN_ERR "register success!\n");
* l1 z5 @2 [) v9 _5 p# x) ]   }0 U# ^3 v& O, a' ~
   else( J) d2 B1 R; H4 g; Q
   {( ?3 J: g, X& Z: V9 t1 a( ?
      printk(KERN_ERR "register cdev err!");
. B4 ^, H: {+ k) Z' |      return -1;# m# n, K1 _- f# \
   }
* z( G9 v, a; I7 h   
. @) w: i+ s9 Y  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);; L8 ~3 [( s; {8 H/ `. n
   if(IS_ERR(mcbsp_class))
7 S3 v; V4 A, W- {   {6 I' f7 P' e' V1 @- K3 T" p& P
      printk(KERN_ERR "register class err!");
. l' \+ E$ ?, F% {! G4 f+ y' G+ }$ I8 [   return -1;
/ w. ^) s- D7 \( @: B5 p   }; z2 [+ c& c) O6 w2 `' H
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);3 ~% V& ?5 r* `" a+ ^! ?
" l6 u0 I  c4 V% u+ H
   //PSC1 C" @& p9 Q0 Y1 C2 ]
   //add Enable MCBSP% B8 e6 U" g6 d2 c
   //test+ ~5 F# ?0 b9 g" H5 R
   temp = 0x80000003;9 c& H0 N" f# ]& ^- R" q7 G
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
4 V# ^. P& X2 T! N) r" f% y   temp = 0x00000003;- I6 Z  J$ K; G% m% B& ]! f  F$ K
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
2 k9 U; O" ~9 V6 y 9 n" M1 s, g9 i* @
   temp = 0x001FF201;
2 b0 X4 A/ y: }* v/ a   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
! K& t8 M( y% d- u   : z& o  {! j. g- L, i5 A
   //PINMUX  
( c* ^0 y) N7 d  Z   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,) i# r6 C! [- l7 |) A% z
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  8 K$ G: W/ @  T3 T5 n
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;     k. D# X# m' P3 C
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
/ i  X$ m* M, f2 q9 |; \   * j' {- n$ c$ V$ Z/ e  `0 N" ?8 v5 E
   //SLEEP_EN,EPR,L138_SHK1,L138_RC2 p7 |, x8 p. E6 ^, C" l
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  * e; @9 D( A, h& a& C/ F) r- g/ y
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
6 F- y/ S. m4 j8 A  c7 V   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
' D$ \9 W0 I; m/ u' I + s, n+ H( o, i9 G
   //RESETn,L138_SHK24 p  A9 W# p5 n9 h% O' |) L8 d
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
2 N$ L9 M+ _( ?! V   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   : o8 d/ w0 i9 N! S# n1 S
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
4 B0 u  ~7 \( I , [8 v* W% N6 u- x' v# ]  ~  [' Y
& ]  r4 I; K0 u8 d
  //SPCR Register
3 K, c5 \- l4 Y/ `  d" C/ a  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset/ ?" T2 a/ L2 T2 j+ Y
  temp = 0x03000000;//(DLB=0)& ^, T- T  \' p9 C+ @
// temp = 0x03008000;//(DLB=1)
7 H; M& ?/ ], J  i. K: P  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset" C; @) U! n$ l1 j0 x
  temp = readl(IO_ADDRESS(SPCR_ADDR));+ `1 i" }- O% a$ \* U
  printk("temp=%x\n",temp);+ r, M! I+ V0 ~- }+ C2 H
2 @$ ?5 H5 V$ F( q
   //PCR Register6 |) `8 n  _" b* q" |- R' `1 a- z
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-09 \) O+ r& h  Y! y
  // temp = 0x00000F0F;7 a: q1 j( g& C: \$ |! O) G% X2 ]' w
  temp = 0x00000B0F;7 Z# I0 X' h3 x3 i
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
4 K3 y" t/ E9 U2 _  temp = readl(IO_ADDRESS(PCR_ADDR));  a& Y% m* Y, X! O% q7 t9 V* L
  printk("temp=%x\n",temp);  
" V! t% y, x3 G9 @' y- H   //SRGR Register" I: Y. x0 H7 ^3 Z! l) l$ w8 z
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
2 O! d$ J, d& I0 a5 p //temp = 0x301F000B;
9 e# Y5 o& V5 T) W   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ' D7 e: s+ k& `9 b) F
  temp = readl(IO_ADDRESS(SRGR_ADDR));+ Z4 S% ~7 e' |- @( F' J
  printk("temp=%x\n",temp);3 A, I4 G9 P  j% W! q
   //RCR
: }/ C' ^$ C* D+ g( g3 Z   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,' D' ^7 k1 m! X: l8 D% v% ^
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0$ ]. J% x! W% l6 j' Z$ H  a
   temp = 0x00440040;* ~5 m0 |5 I$ |9 O! }' P
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
! l+ P- w$ L) B   temp = readl(IO_ADDRESS(RCR_ADDR));
2 G  z% U) j* t+ R) K) R   printk("temp=%x\n",temp);
. B5 k# U8 _' k0 K3 E2 l   //XCR  X, P+ ?( i$ j, @
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
" v; r+ w9 \# y! b/ y   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
* ]; u% f. ^: G' ?, ~* M# m   temp = 0x00440040;. W- d% I% F% X& g! t; O
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
; e# H$ I# _3 I, w   temp = readl(IO_ADDRESS(XCR_ADDR));
% y( Q+ A6 X: g2 I, }9 N9 G$ ^8 f   printk("temp=%x\n",temp);  P- N' `6 m% O# q% Z% U6 |; l
  udelay(100);. m% Z( Z7 F0 ~$ Q7 i
  //SPCR Register: J% `5 |- \! x
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1" c4 e- p0 b0 L/ p7 G
  temp = 0x03C10001;   //DLB = 0 VS DLB = 16 v6 i; s8 w: ]8 ^
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled. w$ `! o& z; T5 o6 M
  temp = readl(IO_ADDRESS(SPCR_ADDR));
3 F: W7 u/ L( H) s0 [  printk("temp=%x\n",temp);
  A' q* |8 i2 D! C& ?7 s  udelay(100);
* C& l" [6 v  |2 c) Q' [1 I3 z: c
& _0 i( s/ v$ f4 n  //set GPIO direction
' {/ {7 G. |! [; \8 i' \" Z7 E$ {: f   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));! T: \9 A. f# s* r
   temp = temp | 0x00000100;//EPR----input
& s0 C8 _  |0 ~' B7 P   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
  ^/ ]. B& K- A% F: G   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 7 V) _; y; v7 G- }

6 ^0 w0 d/ ^8 O2 K   return 0;
2 |9 q2 E0 a' x0 a}6 X, M3 S' i( V( g% P& W
static void __exit MCBSP_exit(void)2 L* m- V0 V- n. E. n7 d
{# f( c& v' a7 e( \6 ~- O0 V4 z
   printk("mcbsp chrdev exit!\n");) L2 A- O5 l; W1 H, M) i
   cdev_del(mcbsp_cdev);
! o/ }( g7 S7 S+ f) {   unregister_chrdev_region(mcbsp_dev,count);7 s: M4 V1 U9 _2 U* \' @
   device_destroy(mcbsp_class,mcbsp_dev);% }! m8 _6 m% S+ T
   class_destroy(mcbsp_class);
3 z5 H' x! P7 g4 O, p}) v5 q# ?( A4 X
module_init(MCBSP_init);- |% Z: W+ P/ i' P5 R
module_exit(MCBSP_exit);! }3 E- p- ]: \  x

% F. f6 o0 o! v9 wMODULE_LICENSE("GPL");- F" V% @$ [, p1 l/ h
' U6 f5 ?4 V1 x5 v
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
' M# ^: f3 E" c! y我的应用层的测试程序如下3 {3 j; H! r7 b( u5 A
#include <stdio.h>( P8 I6 ~+ C' g( ~
#include <string.h>
! d$ N  [/ E7 }: K#include <fcntl.h>- X+ J- Q* b, g
#include <unistd.h>
2 B. F: v% ~7 g, f2 ~#include <signal.h># `  O) I* x2 }! d2 ]
#include <pthread.h>       //线程
" x/ e" ~: l* W; A# Y# Z+ S( s#include <stdlib.h>8 {' Q3 J- I7 [+ ?, a( [1 q8 `; E
#include <pcap.h>          //捕获网口数据- i. k1 {: G7 w' Z8 f
#include <semaphore.h>     //信号- ^- R% l5 Z' D2 c" q9 P6 y
#include <sys/types.h>     //消息对列$ k0 t: O$ s9 W1 M( c& C
#include <sys/ipc.h>       //消息队列
/ x" E# Z* r4 ^9 L' d# v) I#include <sys/msg.h>       //消息队列( j# g4 P+ S- x' H
#include <sys/select.h>3 N# t1 [& k3 f; V* u
#include <sys/syscall.h>9 h3 ^6 g4 [, g
#include <sys/stat.h>
2 j- }& A3 u7 p. D) V* Q#include <sys/mman.h>6 r# F0 m1 @) V% o; |
#define msleep(x) usleep(1000*x)
7 W( }7 B& @7 V) _, a9 n, {' `  Q( \  o* @7 @! p: z
int main()
# @# o9 P: y8 ^, ^7 m# `' V3 z2 l{ + p/ }. i7 g" W" {2 ]* B
    //MCBSP,ARM与AMBE2000交互设备
1 ~% r7 V# F* k int fd;
+ ]5 A* J6 U! E/ p/ L# p4 | unsigned short data_write = 0x5555;$ V+ B8 P& [! T- Q! B3 i
unsigned short data_read = 0x00;2 @0 O" w4 D1 f- k! J
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);2 j; _2 w) @* d" d4 I+ h. n7 p6 G
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);( a9 f; W/ a& L9 K, V7 L/ z# B
   
5 f( ?5 z9 s( S$ l: y2 _  if(fd < 0)8 ?, R% b& j! M: y/ V
  {/ z* J) Q8 f/ B* ^2 e3 v* \" |' {
     perror("open failed\n");
! [# i( x; J: J2 F% o6 _% A     return -1;
: _' l: W. L; R: d3 A& }; w4 W* d4 a  }
9 q2 q0 z$ D9 a" u  
* s3 @3 u& ?/ e0 a$ [# v  while(1)* X& w8 V" w1 f1 d' C+ G
  {8 K4 u6 L/ j5 a0 x
   
1 E) X! {+ z2 Z4 e3 K+ t  M' A   //AMBE2000每次读写是24个字为一帧: C' h3 T# G: B8 }* p5 f
   //写数据时将数据在底层存储起来,等到中断的时候再发送
# P6 G6 X8 A9 z) j7 F   //AMBE2000输入数据是以0x13EC开头的
& j( N. b5 [7 W8 `   write(fd,&data_write,sizeof(unsigned short));) m" ^; E0 B1 g- r
   
, V. W1 T, W) e0 Q, J8 V, I   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
: p3 [9 f1 n2 V7 s+ r   read(fd,&data_read,sizeof(unsigned short));
6 M, B: K4 T' N  k( k   3 i, b% ?% C( Z1 \
   if(data_read == 0x13Ec)3 f3 `+ W+ M( r2 S& [
   {
$ K' e  [# X/ ^# E! W   . O& v3 d2 r8 r/ ^0 {
    printf("data_read = %x\n",data_read);/ o! C7 ?1 W5 [5 ^0 d+ h2 @) m
   }
  _  y" s. g% P6 D* T0 @9 }   
  @! u/ k9 J1 o, a6 X. L$ O   msleep(10);
* r6 C. r2 H! H$ [$ I( q$ M  # O0 i$ n1 d# c' }, h
  /*
, f. f! G  w5 t8 {- C   ioctl(fd,1);   # ]4 E# B1 H/ j0 u" E- L
sleep(1);
3 E; c! H7 N- G0 D6 Y4 [9 ^" s ioctl(fd,0);6 X( a4 M4 }+ H6 N' N- ^
sleep(1);& ~4 b3 _: `' p
*/
* k9 a" o, O$ S8 E/ S  }   , ^+ \, w  B/ z) f# c
return 0;+ a) N' B2 f2 Q+ i. T3 n) ]

' J! P8 V0 O. o. R+ f- n+ T}8 e% `/ R: x3 ]: N) y$ A* _! a; d
1 e7 H' a$ W$ }6 P( j
多谢各位指教,谢谢! 急' y+ a8 ^8 y3 _/ b) X
6 c4 b) \- Z0 N: ^. I
' G% k  @5 l/ E9 W

, _/ C& ?( d: {7 w) {
8 j$ H8 s# o" R5 e
6 K- [. V" D6 `/ v4 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 16:33 , Processed in 0.051697 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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