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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
  ?: e! _5 h' m1 Q/*+ u5 y  g( `; }2 \* T
* Copyright (C) 2009 Texas Instruments Inc
5 q" p$ E% ~/ y' A) H; \ *
" I2 ?5 q& f4 i- T6 Z * This program is free software; you can redistribute it and/or modify  X% @" }3 _2 [; J, J7 e
* it under the terms of the GNU General Public License as published by
% }) ?4 a, b5 H) p * the Free Software Foundation; either version 2 of the License, or9 B' H, {+ Q9 G# n# N
* (at your option)any later version.# Y; j1 s7 J+ p+ q+ c
*0 G$ c" l/ m. l" [
* This program is distributed in the hope that it will be useful,% d9 g; E/ E- T& K; g
* but WITHOUT ANY WARRANTY; without even the implied warranty of# r6 j% u+ h9 y( P+ [* {* @
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ N+ W8 E5 |" f
* GNU General Public License for more details.
3 h" l+ ^% E4 a$ {+ n1 Z *
' {$ y2 d: w  G- v( N * You should have received a copy of the GNU General Public License
4 n5 [1 j6 b% a* G2 e( l * along with this program; if not, write to the Free Software7 I* l  l4 y9 ?6 k1 ?
* Foundati  U% v+ z9 M+ S
*/
+ b) g$ j0 G; e" z; H& s#include <linux/module.h>
9 F( }: g% ^3 h! @0 m, ?#include <linux/init.h># C$ G% W* X. ?% o! L5 k; \- [
#include <linux/errno.h>/ J" I' @% [8 u  F# i* C+ l
#include <linux/types.h>
- _0 Z, T; |5 A#include <linux/interrupt.h>
2 [9 R7 N" C1 d* Z; }#include <linux/io.h>
  u6 z: D6 ^7 e2 Y#include <linux/sysctl.h>7 E! [+ j# q' I1 [$ A8 y
#include <linux/mm.h>
7 \  W: {% B  |. u# ?7 i, \#include <linux/delay.h>  `; a; k* O  q/ h; R0 P3 ]; n
#include<linux/kernel.h>4 b. W2 ^7 u- n' F& h
#include<linux/fs.h>* l$ V1 Z. F8 l* ?9 f
#include<linux/ioctl.h>
) J# c# B1 T+ t* h#include<linux/cdev.h>
6 [0 f' |' q, K7 y, \2 n#include<linux/kdev_t.h>
4 G. t  S3 y9 t  b4 [#include<linux/gpio.h>8 ~; D/ X, M/ I# s- Y; K
#include <mach/hardware.h>2 {* p4 \; l2 `" o) A
#include <mach/irqs.h>8 b2 y% |% O( t# I! o  a

  v5 f6 Q( K( y3 p) K& s! c#include <asm/mach-types.h>8 Q9 {) z, \8 a. z7 j# [
#include <asm/mach/arch.h>- T8 g- x2 W& d$ A/ C
#include <mach/da8xx.h>! ?7 n) A! ~! ~( X1 G
#define  SYSCFG_BASE   0x01c14000
0 _. X1 ^. Q  q. ]$ ]#define  PINMUX1_OFFSET   0x124 2 R* F  E: ~1 J4 H
#define  PINMUX18_OFFSET  0x168 ! n3 m2 F/ d  ^" u1 [
#define  PINMUX19_OFFSET  0x16c$ F0 A+ S8 [" d: |( R  R' p5 c
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
  F$ J. M1 I) B2 L#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
! p* ^' J4 K2 o. u#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
- G, B. }; F) _5 W& h2 u$ T#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
$ K- G0 z; N: g" T2 K, F4 _1 R#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
, \, j; B, F0 S1 o+ Z# O& j                           
' o6 y5 D9 }2 U# c#define DXR_ADDR      0x01D11004  //MCBSP1_DXR# _! H1 c( Y8 O1 t4 B
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR7 D' N; x0 {. i4 }
//PSC/ x6 E8 F3 Y3 C6 Z
#define  PTCMD_ADDR   0x01E27120  5 i9 j% o/ T  S! V3 O
#define  MDCTL15_ADDR 0x01E27A3C, m% q: s2 n" D' D7 Y/ o" \
#define  PDCTL1_ADDR  0x01E27304
  T$ z$ ~6 _- Q: |* R//GPIO8 direction
* M" d$ O, Y. |#define GPIO8_DIRECT  0x01E260B0
& q; @6 b& P+ o4 W3 A, g/ N/ ~#define GPIO8_OUT     0x01E260B4
1 d1 T1 @4 K8 d2 J* S#define GPIO8_IN     0x01E260C0( m" r4 I5 ]; p' q

% c9 ?2 z6 x, k, h/ N. v  l: i4 p. {" f//#define MCBSP1_RINT    99              
6 I7 x: c/ a* _0 J" K) F//#define MCBSP1_XINT    100  
8 `+ i' b" N- v  O/ [1 Rstatic int MCBSP_MAJOR=239;
  ~! I+ |  r) p4 g2 ystatic int MCBSP_MINOR=0;9 u8 W* T8 K  y! o+ c
static int count =1;
- {  B) N! J9 B
* z% j1 \, r: w1 e% _+ ~( O#define MCBSP_NAME  "MCBSP-device"  O6 n+ ?& q, C* S7 |4 N# b5 q

, s3 j4 i. I9 @static struct cdev *mcbsp_cdev;
" H' L6 ?. M- M2 Nstatic struct class *mcbsp_class;
, s- C6 C  z1 e# Hstatic dev_t mcbsp_dev;
+ g$ |. V& x2 kunsigned int DRR_data;5 C% D+ q* [! A
unsigned int DXR_data;
% c) W- ?, |7 g0 D9 K$ N) wstatic int mcbsp_open(struct inode *inode,struct file *file)+ T* z, X; {! g% z( e& h  t- [
{
4 P  k) X! N# }9 p' R$ a  n1 W3 Z2 Z   
3 B  J; Y6 ?6 @   //interrupt enable,initialized
* r8 \5 C. J+ J! F* w/ C' o   unsigned int temp;
$ j- W5 @! A% o   //SLEEP_EN(GPIO8[10])---0
& d% x- G) ~. w' p$ @2 U: \0 F6 ?   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
) S7 k  j2 f: Q6 p5 J0 {2 S   temp=temp&(~0x00000400);! A" D6 f  |% D) J4 W
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
/ U. r: r3 H& u  //RESETn(GPIO8[8])----0----1
6 N* W6 X5 c5 x% _7 [; E+ S7 ?   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% w, x$ _$ c9 |4 D& u8 w, _+ ~
   temp=temp&(~0x00000100);! A2 I1 |0 R1 Y, c5 \9 f  r! l( I
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---08 N# |, @% A3 x' ?1 Q6 N
   udelay(100);  D* U  c6 O- y
   temp=temp| 0x00000100;. E  [8 @" n9 k4 M4 F  O% w
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1! u0 o' q( {, Y
   udelay(100);: ]1 X9 ~6 ~1 t6 c
   printk("open success!\n");  z' a% Q7 n% k
   return 0;
" A* W: S3 u0 T" V6 m}( a* X+ }4 l! Y( _/ _4 J4 a# I

* d6 X* J) p" @! z' ~static int mcbsp_release(struct inode *inode,struct file *file)1 p3 c  ~( k1 u6 y+ N
{
- f5 s; i& m9 q0 Z5 D2 L  x' f$ o   printk("release success!\n");
% g2 {- j; m+ S   return 0;
7 T: D7 S* u' a}
8 [3 u; M. K2 l3 l. v, w# D3 h8 U; ?
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
0 }# m1 {7 ~& F; f+ V{" U4 b" d, V% i0 b5 r" d" [) z  h9 T
    copy_from_user(&DXR_data,buf,len);
" B. e8 o' m) W  q    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       . T, x! m+ B. N/ i( F
    return 0;
+ O3 `' ~2 X+ b$ C( {; ]5 ?& c* i6 J9 Q 2 O1 I7 B0 U- x. e
}+ l* {. \: {5 F, V* L/ b
5 Y. D4 J; t/ x/ n3 h/ P5 l
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
; w3 j/ ?( T0 c8 o: L{
* c8 C7 v' S, ~) H0 |4 |   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));( g* |% A& Z* H
   copy_to_user(buf,&DRR_data,len); ; P! ?1 g, Y2 s( i" _6 e3 w
   return 0;( ]$ B9 @$ h1 b1 }; a% T; T
}3 I, z3 t2 v; ]- G. m* V) Y# z
# b& a+ q) h: W$ A8 S0 x* w
" B: M" \3 @4 D- Q4 y% b
static struct  file_operations mcbsp_fops=
, f/ C. F- q5 @0 `& g9 c- h{
4 a$ j; ^7 u6 j+ H$ t& F   .owner=THIS_MODULE,
- f* p/ c0 J) A" s1 w; ]   .open=mcbsp_open,
- W& d0 L' c/ Y1 i8 ?   .release=mcbsp_release,
; |9 {* x& L. \+ N3 `$ |$ b   .write=mcbsp_write,
1 x4 O3 a2 m# ?   .read=mcbsp_read,' f+ t+ y. E9 L9 s0 R& w8 }: s
};- F" ?0 L. a+ O2 D( B
static int __init MCBSP_init(void)
: o: K, N& L& e4 h- N: f{& f; ^' g6 p6 L! @
   int ret;
# y9 M7 a1 P' Z  `3 U: m   unsigned  int   PINMUX1_REG_old;
, g: \; A8 s3 ]; B. K* M   unsigned  int   PINMUX18_REG_old;
. k1 @$ t& y, w' V* r: H   unsigned  int   PINMUX19_REG_old;1 k2 T7 L, a8 ?+ _- H4 @
   unsigned  int   temp;  9 b- q) l( _9 g3 D% a4 z
   if(MCBSP_MAJOR)$ }$ N/ a+ O. Y+ F5 u$ Z- p8 g
   {; T# Y' i% z. Q9 l: Q# i: t9 x) q
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
3 w. R7 y& j& F! X      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
5 l8 b  t. _# ~   }
5 b9 m6 ~# Z2 Q% z6 r& p   else4 m+ I) L% h6 p  k) ]  q
   {5 ~4 a1 U3 H) b" q( `! a
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
8 f% f' Z7 W9 q( m% Y& K! Z      MCBSP_MAJOR=MAJOR(mcbsp_dev);1 {1 z9 J+ i* i( q0 [
   }
2 ~+ j% m5 J% u5 V   - j" V0 [; g+ j- p+ p7 J
   if(ret<0), K3 ^1 L8 F! V; I) p
   {
% v$ Z) I  _7 K- q      printk(KERN_ERR "register chrdev fail!");1 b+ k( O0 G7 A( L3 [
      return -1;, A5 a4 x3 \7 \3 ~: b" F) U( j
   }
+ f; P7 G; s4 E2 D/ z   4 B) b4 ^* f' h! j% z& H
   mcbsp_cdev=cdev_alloc();
9 N( e( u7 v8 N8 y" D% n5 o% ]   
( e6 s$ `$ H. K( I/ n   if(mcbsp_cdev!=NULL)) f+ t) V2 x" U1 `; _
   {
. }: A$ Y8 D" h3 j      cdev_init(mcbsp_cdev,&mcbsp_fops);
* \. [3 I8 a  @( d( f6 P: @* u      mcbsp_cdev->ops=&mcbsp_fops;8 L$ _4 D* A; P2 j9 T& H  F
      mcbsp_cdev->owner=THIS_MODULE;
2 l  u. D  w5 p5 g9 W8 T1 c      - `' P7 B4 N8 J# h
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))+ T6 m' W' g2 x% S6 m: E) K) J' b
          printk(KERN_ERR "register cdev fail!");1 x6 W* Q3 S3 s1 d
      else" Z, H- F# F9 r
          printk(KERN_ERR "register success!\n");: R6 L7 w8 a8 s
   }
) ^7 H$ q" X3 @$ @+ m6 X   else9 R# J" Q$ M5 ^( V8 }; _- ^
   {$ w6 k1 m" T) A: {& \; i
      printk(KERN_ERR "register cdev err!");: H$ i# W( J& H6 [+ x* s0 ^# j
      return -1;9 ?2 S8 J/ T+ n( i- T3 R# a
   }* q9 M1 {! ?% k# y! m
   
8 y* R( _- z9 W/ g3 O4 `  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);5 m. q" Y  K: q- i- @
   if(IS_ERR(mcbsp_class))" x0 F- H. _! L5 t- h& _
   {
0 |% A/ S: X& j& {* D2 m# [! ~      printk(KERN_ERR "register class err!");' Q. t3 k. h; _- g
   return -1;% ~7 t8 g# \/ `& z
   }
( R9 h; T: }# o( Q# a# ~1 U   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
- G& m6 Z0 F; ]% V7 |6 F1 ?1 E* t+ a0 G6 b7 V4 n
   //PSC
7 I0 h0 c% e8 G9 K  j" q1 H   //add Enable MCBSP
8 K/ l* {. d" N' X+ C- q   //test/ O! F1 @: k3 e, q% ?6 z4 e
   temp = 0x80000003;
3 O4 e5 t. a% n1 P7 s   writel(temp, IO_ADDRESS(MDCTL15_ADDR));7 P1 E, p2 v" Z7 b3 `
   temp = 0x00000003;& K& ^( a( r7 q1 p
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
- A  l$ p3 O  @6 A% J( q4 _
/ |$ \3 F; S. u" f* i, s   temp = 0x001FF201;
: I& e* L! n7 h  w  D2 g% q   writel(temp, IO_ADDRESS(PDCTL1_ADDR));0 D$ ?' z( K' v7 H$ @. [9 L7 K& [
   ) B5 x! g5 G1 E; g
   //PINMUX  
2 K$ }/ L$ v/ S   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
& R' X6 p" y' c9 ?# G' C0 {   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  - q0 S+ P' c0 x2 j$ U: ]  |7 |
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
  L( R7 d  Z* s8 P2 _$ c* v8 ~   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
; G: y9 S* m: {6 D4 w7 b   
; ^- Z7 u9 R! f0 Q/ s   //SLEEP_EN,EPR,L138_SHK1,L138_RC
9 _7 G6 l: }* g, K, V) G9 B3 @" M1 |   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  2 O3 L( E: e+ F3 U) A9 ~
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
6 t, }) V! B) t7 A; y& q5 O% F4 B   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);+ q" w0 b) z! T: [" f; v; ]/ ?% r" Q

" E  w7 x9 g7 H+ N6 F) B" m   //RESETn,L138_SHK2( J7 d* g8 ?+ s" s/ E
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
3 v* [* y: }1 @- @! C; f8 b   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
8 O4 i: U  Z7 P0 C# t! [: R   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);+ N! ]8 R; a. o

1 [" F( k' M1 K. {! Y 8 ]/ V- d" q3 }5 {* v( j
  //SPCR Register
" n% I0 T/ K; q$ i) F6 x  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset3 o7 v4 p/ q: z
  temp = 0x03000000;//(DLB=0)& B4 H% M% z+ v9 T# Z5 O
// temp = 0x03008000;//(DLB=1)/ t8 W0 e2 ]; s. i0 q& ~5 S7 N- V
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
% k/ P. g" C0 M* n) H: m  temp = readl(IO_ADDRESS(SPCR_ADDR));, D, g  a2 q8 [
  printk("temp=%x\n",temp);6 I7 R1 y7 s8 N& v( L

) [" h( z+ p4 p% P) d5 W   //PCR Register+ f& P& G& {' T
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
" z/ x' T/ T& O$ m& H/ i% B  p  // temp = 0x00000F0F;
! `3 b2 b/ ~" Q9 }' z% _' f$ l% H  temp = 0x00000B0F;
( J7 k; Q  p- n" B  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 7 ^" a" E- N+ f4 ?( Z* U
  temp = readl(IO_ADDRESS(PCR_ADDR));* p- o6 Y1 I: a% C0 f/ J4 `4 D
  printk("temp=%x\n",temp);  5 W$ O. o% P! ^' }% K( x: ^) z
   //SRGR Register
: c( m. Q+ g7 J* b( x/ A* ^   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11& t! k+ a# c" L1 S
//temp = 0x301F000B;
7 P- j) R* p% L# E! r   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized % A( z/ e0 N/ R4 L9 V/ P& O
  temp = readl(IO_ADDRESS(SRGR_ADDR));
: N' w$ T3 e0 u( j' U0 N2 W  printk("temp=%x\n",temp);; r% k; _# }) P! [" X
   //RCR9 u% i, \& G- _: ?* Q6 R
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,; H* [/ j2 u. }8 m* U, \; b
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
: u+ l. R# G& ^5 F   temp = 0x00440040;
% j6 [6 N: _1 ^: V0 p; n   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   ! P- a. u# F( H0 o  C  X+ q$ C* y
   temp = readl(IO_ADDRESS(RCR_ADDR));/ ~# }$ o" k) i% N3 e3 [9 L/ B
   printk("temp=%x\n",temp);( a3 X; D( q( o7 G2 |; E
   //XCR
( v# s# m! k% z4 ?& b   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
) U8 O, _% @% ]3 Z   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
/ L9 @* O, j- `   temp = 0x00440040;
7 T+ s8 M% I, g) ?- O   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
9 c, h2 z# Z3 p0 ?; y5 \& ?   temp = readl(IO_ADDRESS(XCR_ADDR));
, ]2 c' M: w0 M4 i9 D+ {* x5 E   printk("temp=%x\n",temp);$ \7 I( F: {; `
  udelay(100);( E" ?$ ~- G* D# J
  //SPCR Register
3 v- X% G% w3 ^  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
* l4 Z+ E9 v! q: a7 t, Q& N) i  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
% M- ]+ }) m6 Q: G- ~  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled* V! A5 ]" L! _- `
  temp = readl(IO_ADDRESS(SPCR_ADDR));. c6 w- L% n8 n& z% @6 H  e
  printk("temp=%x\n",temp);
! ]4 O( s& V; b, a: D  udelay(100);
" L  G  T5 ^+ }9 j6 m2 k
2 p6 k9 H* H0 n& ^2 K6 l  //set GPIO direction
0 Z  k# B! r0 X2 ^  ]   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
: U' M# g4 k3 r2 h% }7 m0 K   temp = temp | 0x00000100;//EPR----input: w& Y% B2 q& m- g$ Y& n
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
) G6 z7 ^0 U# A: G   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
. B2 r& |! P2 \  p2 `! K+ |, x9 ] * W% _! n4 B7 P  Q$ \- [! i8 M" V
   return 0;3 d! w' m: I  k. }. S
}
2 }! Y# f. D+ g* _( {static void __exit MCBSP_exit(void); o9 v. M9 W+ P* c
{  F3 n% ]4 J1 D' Q/ t
   printk("mcbsp chrdev exit!\n");0 }; E9 X+ {+ o# N: R
   cdev_del(mcbsp_cdev);8 O: i/ K2 k0 P7 E& k
   unregister_chrdev_region(mcbsp_dev,count);
. @/ j2 L  k6 G5 m% C% A5 H   device_destroy(mcbsp_class,mcbsp_dev);
. E# c9 C- {) o0 a* s' X   class_destroy(mcbsp_class);( _# C/ t, n' i: @1 A0 I
}+ j. Z: y1 s" y# u0 r$ V8 l2 ]5 r
module_init(MCBSP_init);; u/ b: W2 u4 ~/ l$ X
module_exit(MCBSP_exit);+ W0 j+ _1 V- ^# F$ e
& _3 k) |# W( C6 p; c0 Y
MODULE_LICENSE("GPL");' \+ u, C% d( Q- I
& @0 h: i! d8 ], b
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。( j# _8 ]' R4 N) r* s7 j/ c5 U
我的应用层的测试程序如下
# B$ E$ C: Z6 a0 ~4 Q, g#include <stdio.h>! r5 P  Z2 J  R$ I
#include <string.h>
( ~) v2 f  _6 k1 b! J1 P0 u7 V#include <fcntl.h>
1 a! j6 P! O$ D2 M#include <unistd.h>/ J$ s6 u6 ^/ g) x4 v, S- l  ~
#include <signal.h>
- K5 a% P' `' W' I# F# R#include <pthread.h>       //线程
1 Y6 o+ w2 l) `- f; t  V* m: f#include <stdlib.h>
9 K' G0 U5 z8 j) R#include <pcap.h>          //捕获网口数据" s) Z, W: G# b) Y" S# Q8 {
#include <semaphore.h>     //信号  L' e1 g$ @3 Y# B, L
#include <sys/types.h>     //消息对列
- `! C  z0 Z; F% w: d#include <sys/ipc.h>       //消息队列) r8 r7 C; y! @& H- n3 O7 ?; M% ], b
#include <sys/msg.h>       //消息队列9 J1 N2 y$ S5 m: S* L! N- w& X& p
#include <sys/select.h>& b& p7 g; ?% l- G3 P2 H  p, v
#include <sys/syscall.h>3 q# Z- m; N9 p, Y' j# k% H' J+ `1 ^
#include <sys/stat.h>
& q! j2 p, z9 t& j3 d# q5 P7 q#include <sys/mman.h>8 S6 E0 |2 {  ~7 |/ v' u
#define msleep(x) usleep(1000*x)# D6 M+ u; f* z/ N, p1 X

  g) U, Z, e: w4 u% Q, n" f7 Qint main()# |8 Q9 n* H, w. S
{
( ?5 Y9 Z6 U" z. ]/ |& x: |0 C  M    //MCBSP,ARM与AMBE2000交互设备
1 Q7 k/ w( g8 `' \ int fd;
0 T  K# U8 t& O# A, b* _+ j unsigned short data_write = 0x5555;
( I5 K* i" Q; E  @1 Z unsigned short data_read = 0x00;& h/ ]# }9 @2 ^  e3 s
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
0 p  A* H! h. \! y8 B0 W0 R& K; { //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
9 e" q$ ^2 ]  e% y    2 [& @' P7 \9 x
  if(fd < 0)9 ]6 _5 Q4 L: U  C7 o% k3 j1 x6 y
  {7 Z7 _- @/ L0 a: t4 {
     perror("open failed\n");) t' _- K) f+ p! ^5 i" Y; h" m
     return -1;7 K5 k  \% Q5 t; C9 p
  }
& F4 Q1 L0 H' ^  ( a, f, r3 L& v% m$ ]
  while(1)
, i7 l& ~7 m+ [7 d  {6 C" c; S  J6 }5 \+ T3 V
   2 G+ _8 q  H; ~0 S
   //AMBE2000每次读写是24个字为一帧
  ~' X7 Y9 \% i+ h; @   //写数据时将数据在底层存储起来,等到中断的时候再发送0 f! h2 Q+ d, Q/ E+ u8 _
   //AMBE2000输入数据是以0x13EC开头的) z- Y+ W$ i, N$ a0 C& J+ A+ z
   write(fd,&data_write,sizeof(unsigned short));, R( [% {  ^. O% q7 L6 R
   1 E$ p* V9 F) a4 e# S
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  ' u4 k4 o- G. U' ^3 n
   read(fd,&data_read,sizeof(unsigned short));# F/ L- y3 q+ @) o0 Q2 J( T1 v
   1 P. t3 X: s( L+ Q9 k
   if(data_read == 0x13Ec)' F& h1 Z% J/ m+ x& |
   {
4 E8 h) C6 l( y/ m# {5 Q   , [0 U. n( o6 Y; i. M3 h" ~
    printf("data_read = %x\n",data_read);
- K' y  T: ?4 L' H  v% z   }  M% m6 x# a5 y" |
   
0 J$ |/ u3 l' V! E  P: A   msleep(10);
/ _0 W/ K3 C/ h: S( A  
, i3 L2 o& E7 W1 {- @/ U7 X& n  /*
7 ]# E( h6 Z7 Y1 n   ioctl(fd,1);   
5 e/ y, m2 u1 [4 J8 R: C# K sleep(1);: R# O$ x3 M( d$ E' z
ioctl(fd,0);
  z5 u6 Z  ?, S6 f sleep(1);; v* ~: m3 |5 M: X, D) }
*/ % m$ ?9 y! ~& t+ n
  }   
- G- y3 R+ `* W. I9 |4 Z3 V. t1 a return 0;$ x. o9 @* d9 ]9 V+ d6 N
1 G# e  n! `8 ?. y- f- [, {! F
}& Q4 E3 v9 z4 A9 C6 t

: C- K- D4 ]5 E* t% }9 N多谢各位指教,谢谢! 急
& y" K0 M5 t$ K2 G* V8 `, O0 G! y) ~8 I2 M0 Y( ?
" n3 I! w# l/ l8 I; S- J

: j9 E1 ]7 l( }
* s# G: r: X, J* a* M
0 Q* J/ P! ~7 d% [; e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 01:25 , Processed in 0.050548 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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