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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: $ r* w; j4 Q4 L; A0 S
/*
+ W& R6 _4 w9 V0 c2 r+ R * Copyright (C) 2009 Texas Instruments Inc5 ?3 Y+ w3 S% m6 c; U; q3 `: i
*
5 Z, D" ?$ m6 X) ?* |9 j0 g3 P * This program is free software; you can redistribute it and/or modify
4 c+ K$ W+ R( |2 o * it under the terms of the GNU General Public License as published by
/ x' r" m: J& ]- C$ f- q& | * the Free Software Foundation; either version 2 of the License, or
- ?  Z& Q, e. G4 I. k * (at your option)any later version.
- c' V6 f" P6 X7 }$ f *4 R. m& |. Y, H& A: [4 |
* This program is distributed in the hope that it will be useful,
3 n3 ?" ]( I+ d* N' ?* V: c) r * but WITHOUT ANY WARRANTY; without even the implied warranty of
5 `( K/ ]* y% v' D; f * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 n0 s9 G% P  P * GNU General Public License for more details.1 P& H" ]* B& J, q/ ]
*" _/ [' L  z) y% Q
* You should have received a copy of the GNU General Public License- j0 c) N& R2 E$ E2 X7 {1 q& E
* along with this program; if not, write to the Free Software$ Y+ a9 v3 u0 `4 J. F; F8 z2 }* {0 T
* Foundati4 t8 t' X5 d6 R' [( x, j4 k# |, R
*/
5 u8 }% K7 B% S% P6 `. T( B#include <linux/module.h>+ }( O% l! }/ S( x0 d8 ]
#include <linux/init.h>
- z6 Y* J+ V4 C& s+ B4 i  x#include <linux/errno.h>( G( k& A0 }/ h, |5 C# V* f) e
#include <linux/types.h>5 ~7 {" D$ {4 _
#include <linux/interrupt.h>% A) z5 q. g' _8 H! B) D$ W
#include <linux/io.h>
& Z5 o8 ~) P2 g, H#include <linux/sysctl.h>4 `3 s$ Y) R: d4 H9 y
#include <linux/mm.h>
& k# m; H# u# c( o& r5 ~#include <linux/delay.h>1 s  R; g) ~5 {. R; S9 a1 [* l: r
#include<linux/kernel.h>
) m  C( H  H: |. K#include<linux/fs.h>! T( Q* ^" C. `6 f3 K7 a3 p( @
#include<linux/ioctl.h>$ u2 m) s- I7 J) @3 _
#include<linux/cdev.h>
; @) `* p9 e  o* h& }3 Y# O8 O#include<linux/kdev_t.h>
& F; L0 w- h4 \" E9 i  B: E. h# e; z#include<linux/gpio.h>
1 f6 n  z! n4 D#include <mach/hardware.h>& X9 o. }2 J, `/ R  o
#include <mach/irqs.h>) a/ Y- y2 }! l9 ?" A
. t# k5 C1 _/ h6 m* ]: D
#include <asm/mach-types.h>
5 P. s* p5 r$ S, x# Z2 u1 p#include <asm/mach/arch.h>
% h/ ?. H* y: P: v  n) _7 q#include <mach/da8xx.h>+ S) D/ p6 v4 _3 ]
#define  SYSCFG_BASE   0x01c14000
% t1 x3 v2 V" N#define  PINMUX1_OFFSET   0x124 , ~) K! m: {1 j9 w; j
#define  PINMUX18_OFFSET  0x168
% ^/ S% _& D; ]+ C$ W! e: J* z* `#define  PINMUX19_OFFSET  0x16c% ~6 R+ I- D8 J( y' D$ S" \& F
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
' ]8 U, U5 i) ^#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
9 a3 N) D, o' U: H( G" U. R& B#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
7 q& G' J0 x/ |; r  H' W3 y#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
( _3 z. J" x4 ?7 r% D# l% b* E2 x#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR( ^3 W9 d& T5 E) Z; \
                           
3 Q8 y" f, c- T#define DXR_ADDR      0x01D11004  //MCBSP1_DXR5 k+ S2 E1 c/ c$ v" O% a1 @
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR" e( E- I0 T6 w# ~5 q  Q
//PSC  H; I5 N: s& k7 b
#define  PTCMD_ADDR   0x01E27120  + w/ _% G% @& M9 `3 T3 d
#define  MDCTL15_ADDR 0x01E27A3C
' D+ s) S& [7 F) ?#define  PDCTL1_ADDR  0x01E273047 `2 ?* |7 F. m
//GPIO8 direction
' D/ X, n2 @% P3 J; x9 u# a#define GPIO8_DIRECT  0x01E260B0
, k; k' l' j- v" |7 c* S#define GPIO8_OUT     0x01E260B4
% N1 ^. x% _9 L3 X3 Y# @#define GPIO8_IN     0x01E260C06 ?- o/ s* A# k( }/ H& O0 Q

/ X( p7 a, V5 t  M. f6 b: P: G//#define MCBSP1_RINT    99              
1 n% P' r1 o/ V! P) H$ T//#define MCBSP1_XINT    100  
  B/ k* a( s+ t/ L% L+ J" \5 Wstatic int MCBSP_MAJOR=239;; y1 ~: A+ L8 F' H+ A- [8 j% @. F7 O
static int MCBSP_MINOR=0;% ^2 p$ q, L. G( Q" a3 c
static int count =1;. n; a# j! ]6 C. d) A- N/ y0 y# u* H

6 h& O6 G- Y7 o& k# K#define MCBSP_NAME  "MCBSP-device"
6 E  L, l8 z% w  K* D
) u& S- W% |6 t; N) Q8 s4 pstatic struct cdev *mcbsp_cdev;
* z: ]1 }2 [( `static struct class *mcbsp_class;+ _2 @* G8 {1 R! k: W7 ~
static dev_t mcbsp_dev;
) U6 ^- G6 N+ K: z" Zunsigned int DRR_data;! I' K- R3 y- w7 X  S: }6 {  K( X7 e
unsigned int DXR_data;
3 c" N6 R, r$ istatic int mcbsp_open(struct inode *inode,struct file *file)
: r8 n  R$ I  h3 G# V' p3 H{
$ B) {+ q  O6 L# M* @7 B, a0 m1 Z   6 N0 e# O. w; x* D- Z
   //interrupt enable,initialized3 Z1 z: z1 ?) k; Y3 ]/ w
   unsigned int temp;" |  _7 t+ \' M' w+ _1 }6 s) r, \
   //SLEEP_EN(GPIO8[10])---01 r% W& n( y' A" G* N+ ~2 H5 U
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));0 c* L* z+ D8 D- {
   temp=temp&(~0x00000400);
( ^8 X! _' W. W+ {) w7 b) j5 [0 b   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
- ^" _5 k6 i: U. w  //RESETn(GPIO8[8])----0----1
5 a: F- y- i6 B2 Y& X   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
* G% s8 f" o" @. K   temp=temp&(~0x00000100);
" Q4 F: G( d* }# f9 R! p   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
1 [6 s6 X/ H' @0 h, D: k   udelay(100);
1 V: T3 _# X8 L2 P" z. J( x4 Z   temp=temp| 0x00000100;
3 V0 P: S+ s. e0 x; M+ a: u* o   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---16 g: u, {+ ^  n( C( i: S+ x
   udelay(100);8 m1 E; ~- O! X0 }0 N8 i
   printk("open success!\n");2 d( Z1 t; |& x
   return 0;
& n0 h9 e) ?  R2 I6 i  `}
% S3 J9 m3 \; P/ g* o7 `
; ]) k# U9 H2 m9 Q" F7 @static int mcbsp_release(struct inode *inode,struct file *file)
( `7 L7 H  ]4 Q6 _{
, i6 _" f' Y9 b0 f   printk("release success!\n");- N0 B$ ^. ?1 [, }3 z) m' v8 F
   return 0;
0 g' L  x; O# P" [, O}2 F, v% y) k$ s

4 _1 J* I* ^, F, r5 R  Wstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
" k+ f# m- e+ l. _- _$ I2 c{
) T! ~0 m1 G9 y# G# P/ T2 K1 T) n    copy_from_user(&DXR_data,buf,len);: X5 Q( Z( \. n' b# q7 h
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
7 f9 S  c7 C: \) R. ?    return 0;' r9 D( f) s) E- I
$ z. }1 v  }3 G+ f
}' i  j+ U+ \* M1 G( X
7 L+ H* _1 R0 z' }
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)! @, _8 O8 v9 V* s" Y2 V
{ 8 d8 T0 @. @1 z
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));* R# X& q9 l" W  y3 I( J
   copy_to_user(buf,&DRR_data,len);
! Z  K) Q$ E0 u1 d4 H   return 0;
) Q' {) X) E; y! m: z1 r) G}
. o/ J/ U. W# u0 U6 l3 Q% x0 h9 q: v0 }
: R' t* v4 G, k9 C' H* a
static struct  file_operations mcbsp_fops=2 Y0 R# y. I/ l+ v; E. e% d9 q
{
  A2 A# \1 w: \# H, h   .owner=THIS_MODULE,
8 _( z4 q/ E6 ]   .open=mcbsp_open,- v3 B/ Y& T6 C: L; H4 k2 V
   .release=mcbsp_release,
8 c. P; I3 q9 Q$ ~   .write=mcbsp_write,: p& H6 _$ z- W1 k
   .read=mcbsp_read,! v3 O2 @) W% Y9 U
};
, z4 C. `( B. Jstatic int __init MCBSP_init(void)  J3 `) q0 ?8 I) z: n
{
0 c" ?+ F7 ?  m! Z5 C   int ret;% |- l: {. w7 f( ]2 L! b/ b
   unsigned  int   PINMUX1_REG_old;
9 B! ~" x' w) h6 H+ I3 b! |   unsigned  int   PINMUX18_REG_old;- \, `/ T% g* J% J/ ~: J: U
   unsigned  int   PINMUX19_REG_old;2 c% p9 l; Q$ {8 r1 l" V
   unsigned  int   temp;  
, B! k( v4 l( E9 E( ]2 x* o: z3 K   if(MCBSP_MAJOR)
; D; g2 l4 I& ^7 n9 K   {
' I5 i( n. V% t+ f  X( @7 i" y      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);" i. a: @0 X- P0 x
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);' w9 [/ n4 S4 L, {0 O- |! g- ]
   }
# U7 ^4 U* E" A) d! [# D   else. M% i% x( B8 [$ u+ j2 j! Y
   {
3 c9 N' e+ B6 }% R2 j      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
0 o: O$ B4 [! {" v; }9 N      MCBSP_MAJOR=MAJOR(mcbsp_dev);
# D' n, U) @# N   }3 g& _: T) ~4 v7 Y
     o( L# l- i1 b( k
   if(ret<0)
7 ^3 @4 f4 }6 I8 |   {
7 @. e( g$ [$ O3 S% s# n; d      printk(KERN_ERR "register chrdev fail!");
6 ?+ h. o; G( W  }      return -1;' ~/ y6 d# v  H- n
   }
9 A5 h: ]7 g3 E0 v) s   8 u& L) M2 y" |) @! ~
   mcbsp_cdev=cdev_alloc();
" Z, Y& x$ z% F( P; D5 o/ {; `   ! \4 S* E/ p# O& e" B, \
   if(mcbsp_cdev!=NULL)4 u, b* |3 [3 U7 ^
   {/ g7 |4 P0 v. f' s; \/ Q8 e
      cdev_init(mcbsp_cdev,&mcbsp_fops);1 O$ _( ?# Z! ~6 E; Z4 p# S, t
      mcbsp_cdev->ops=&mcbsp_fops;
6 E; J, `, N! c# B# Y% @      mcbsp_cdev->owner=THIS_MODULE;
8 V. |6 K+ U$ `4 B1 T9 v$ N; @      ( v2 L, k7 l# D) t/ Z1 ~
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
' n2 U" l4 J1 K/ \          printk(KERN_ERR "register cdev fail!");
7 f/ u1 `* X* [7 l      else
) r/ _5 }% Y) h& d" m$ L          printk(KERN_ERR "register success!\n");
3 y5 K$ q' B; T- d3 [- f! b   }5 Z7 ?: k2 F. Z+ R' I4 w2 }1 R
   else3 Y% j% t6 W& ]% d! J& _- H9 K* z
   {9 s* }- o0 c. }- ?6 H3 s5 u* t  b
      printk(KERN_ERR "register cdev err!");
) }: n  _2 i7 U  F      return -1;
) q. w2 G0 M6 D9 u   }  ~$ a: P' T) C7 ]" D
   7 t7 r4 h# M$ ]6 i% r9 J' {
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
# A( k2 k: |$ {0 w   if(IS_ERR(mcbsp_class))
' b( d& j6 e7 u, a, t2 M   {; |2 k& v$ ?/ ^: ]6 W* H
      printk(KERN_ERR "register class err!");
/ I& t- |1 F9 B   return -1;! f+ [5 V9 g# d& r7 b% N- W2 f
   }
. k& w% I5 [5 L! ]/ K: F  F. `   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
' K$ j9 l+ i3 Q7 Q
+ \0 d  c# m  {. \/ u( O6 t   //PSC6 A4 q/ Y; Q: Z
   //add Enable MCBSP
" Z1 H2 i/ V* s2 O0 T   //test9 M, a9 K( y4 C" u
   temp = 0x80000003;
( z: n- l; W, b7 U   writel(temp, IO_ADDRESS(MDCTL15_ADDR));, e( w  O0 T: K, W! L
   temp = 0x00000003;' i) L( r" b/ ^& q3 n# n# L2 l
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
5 k# `- a6 F" |" |% ]
  T+ Y9 V4 p1 n* _/ C; v   temp = 0x001FF201;0 E, O* X9 p) a7 _( ?: Y/ a
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
- c- f1 R2 z; a   $ u5 H4 B% H! f% {: V# F
   //PINMUX  ' Q# y4 w& k; l7 k+ ~' `$ R
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
2 m" b# P  ^! E   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
5 R+ S2 e! L1 x8 g   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
. t' d  W: H0 Q; p   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
% O* \, N9 h. Y4 Q" Q   
) D1 g: j' p% t0 x1 S3 P   //SLEEP_EN,EPR,L138_SHK1,L138_RC
! [4 W( L$ B+ _+ Q  r$ {. T3 `   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
8 m( c2 \# |" P' l* X: A) m   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   $ O* q  `" @: L; N
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);7 h2 k: g- X9 K, _  A

' Y" [: I7 e8 G7 F' G   //RESETn,L138_SHK29 A, H4 D9 b, Z& s' [, v2 l
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  / L! j0 k" x3 x
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   * h8 A7 c6 V# v9 d* r0 _1 e
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);* s6 t. M8 S( W( ^
: f3 [% j8 m' r) o$ S$ G7 y

7 }) A3 p/ v: o  //SPCR Register" V; U* y7 ]: s2 U7 I
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
5 g' H( {' O' {! u5 z1 }8 r9 K  temp = 0x03000000;//(DLB=0)! z2 Z9 d$ m  G  m2 Q" C
// temp = 0x03008000;//(DLB=1)
% g2 M' T* r  i% v  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset- J; d, y7 [* z
  temp = readl(IO_ADDRESS(SPCR_ADDR));+ e; o: I4 |* ]( [$ K( R
  printk("temp=%x\n",temp);
# c) ^& ?0 ~0 z4 P/ t* Y: o* b & f  b: L+ x8 w4 |
   //PCR Register# Q  [% t: K- U# e1 D  F; U
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
2 I0 `+ y/ N2 \  // temp = 0x00000F0F;
5 m4 b1 E& S$ S) }9 }  temp = 0x00000B0F;1 P' @% A2 q- }" [/ b5 y$ i
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized & Q1 e: ~" b0 E' Z/ o  I/ q. G
  temp = readl(IO_ADDRESS(PCR_ADDR));
" r. e0 Y0 g/ e. i  printk("temp=%x\n",temp);  % x% C$ E: _: Q8 H
   //SRGR Register
( t: k# a1 [, G& F0 y9 d   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
3 E$ r. t  z2 O2 ^% V //temp = 0x301F000B;
) G. u% ?; q/ K  D! J0 K   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
1 l$ x& ]. e/ m* _. V  temp = readl(IO_ADDRESS(SRGR_ADDR));
% \0 m5 U  d( P. f  printk("temp=%x\n",temp);
5 r5 ]$ l) x, _) b# o$ y; p   //RCR* p, c0 `8 S" S6 f' z
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
8 L( k+ i& t; E1 U! {) Z( ^! {, c8 A   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
9 U: N+ C; g! {& ^& ?  X, y( C   temp = 0x00440040;# }" v5 X) }. B% c  u9 F0 t; U
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
8 e( Y+ V" i6 ^1 _, A   temp = readl(IO_ADDRESS(RCR_ADDR));/ C1 m0 l( C. _& c
   printk("temp=%x\n",temp);3 T2 ^' j& b8 L! ~
   //XCR
) J# l" R, O+ B3 b, A* A# U   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
1 h% [  P) G, i0 W0 h   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
; _5 K* v. ?5 P" f' L) F2 y+ I: L   temp = 0x00440040;
: v9 h- X8 [- ~   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
. |. a  E7 Q' v4 C' C+ s   temp = readl(IO_ADDRESS(XCR_ADDR));+ ?5 p) L8 O9 H
   printk("temp=%x\n",temp);
; _  b) O: \) d2 u: h/ T6 ~. {7 S  udelay(100);* t2 u4 u; o  l/ R) {4 M/ j( N
  //SPCR Register
$ G9 w' x1 e& t5 w2 Z( d  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
' Z' H) `- {' y/ v3 v) B  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
  Y  E1 H& \1 T4 C! g) T7 P0 o  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled, \* j. t& i; i: [( x
  temp = readl(IO_ADDRESS(SPCR_ADDR));" A2 Z8 Y( ~6 i: F2 L4 K$ p8 M( K
  printk("temp=%x\n",temp);0 m2 v/ c& n) ]% j) U( \  ~: ]( x
  udelay(100);/ n+ z4 e' z1 W

) [2 R4 v( f( B  //set GPIO direction
, }# J5 W% \5 X0 i# s: z5 w; ~   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));) i$ U( {, }- x
   temp = temp | 0x00000100;//EPR----input( N7 R- i. X2 _+ Y) Q/ u$ O1 e6 i
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
& k" ~7 y% P0 ]* Q9 W5 {   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ( T. l2 ^* T3 L) l
) I, l. ^0 J' v' B9 [4 B
   return 0;
. n! X8 _: l3 w7 q/ h}
& }5 f9 u6 s6 J: J6 C4 y% Zstatic void __exit MCBSP_exit(void)
( [3 F: B  t* u4 o; b5 U0 R{
) A6 ~6 R1 w. I( U  Y# Q6 C8 T0 i7 J2 y   printk("mcbsp chrdev exit!\n");4 ^. N. A6 w2 b% L, ]7 A
   cdev_del(mcbsp_cdev);
$ r. n; {: O" g4 Z: }% C. f   unregister_chrdev_region(mcbsp_dev,count);
. n3 g0 R' M6 O; T) i: X  C   device_destroy(mcbsp_class,mcbsp_dev);; Z  p' A7 M* t! |* H! }$ I
   class_destroy(mcbsp_class);
8 [. e- e1 v/ \5 U}& x, ^; b8 Q4 |& ?
module_init(MCBSP_init);$ e* [9 J% @3 v
module_exit(MCBSP_exit);
/ i/ y0 F4 N( m# k( u$ k3 R9 o. a8 U/ x
MODULE_LICENSE("GPL");, N3 J6 n) M5 n4 E+ q9 a8 k

) _0 ?" U& `. q. o( S我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。- I# y/ A- Y  W
我的应用层的测试程序如下! F* @/ E9 V% R: o8 Q1 }8 H
#include <stdio.h>- V: d/ w# S0 a; H# b
#include <string.h>. \: Z; j( V% g! T- H
#include <fcntl.h>
: m" Z$ @5 {9 ]& U# D2 u0 q+ T#include <unistd.h>
/ ^% V0 K" u3 v% |8 y7 v9 }#include <signal.h>1 A3 H; i2 o, m! F, ?1 i8 ?0 r, _
#include <pthread.h>       //线程( ?0 y7 X3 |: l
#include <stdlib.h>) X( ^5 I8 c' ]% ]" u* m8 e- s0 g
#include <pcap.h>          //捕获网口数据
" r6 N0 t- z3 V/ a#include <semaphore.h>     //信号6 s2 e( a6 z9 V1 `. @5 c
#include <sys/types.h>     //消息对列
6 ^( z7 i( A1 P2 Q* j% ]#include <sys/ipc.h>       //消息队列6 R: p5 O+ {6 [$ A' ^- U3 X
#include <sys/msg.h>       //消息队列
  c1 w. q& }' E# `, x#include <sys/select.h>  M5 Q6 j3 r4 h; v2 Q/ p+ A$ g2 r
#include <sys/syscall.h>
( W, |6 `7 c+ p0 a9 I#include <sys/stat.h>  C: r6 D; A& D8 x/ G
#include <sys/mman.h>
5 ]) d9 }8 ]5 b3 N' q# b0 ]8 {#define msleep(x) usleep(1000*x)
8 P- k/ [  U1 W$ E7 D( \
7 w0 v0 `1 e; U7 b; i, s# mint main()
' e) I! s# _! i1 T7 m2 s/ J) @{
( C$ ?+ W; [) [1 \/ X    //MCBSP,ARM与AMBE2000交互设备
  U0 J: |$ l0 @+ u) U( l& H/ V int fd;2 e( L( L1 R8 r2 W# \: ~/ E, n8 D, H) d& \
unsigned short data_write = 0x5555;+ w8 I! \9 I" v  H& Q! I: l
unsigned short data_read = 0x00;8 A  M" B; u$ {% I, G- P" \( ~
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
5 r9 j# ~9 a  D8 e- I& H //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
+ ^# h5 Z! D& C   
/ T/ J6 W" j, V3 S  if(fd < 0)) z4 e6 b2 f1 T2 ]
  {
3 [6 M( l( C+ k+ k, ?     perror("open failed\n");
, X1 g$ f; u6 `3 Z     return -1;
1 ?0 A' m0 @' t. A7 S; I' H9 e, R  }6 o# P. }7 `0 `7 S; k- a4 K
  2 e: r% o! p( E- k% [* h
  while(1)
" ^% D# c4 T1 B# D+ w  {
, o. Q+ z" X. g" \: t9 C( r   + f+ y: k2 s; @/ z% C
   //AMBE2000每次读写是24个字为一帧* u6 G( [' A$ b* g6 I# J
   //写数据时将数据在底层存储起来,等到中断的时候再发送
8 |% W/ [' U$ ]8 C. t% e* [1 u   //AMBE2000输入数据是以0x13EC开头的- ]/ a+ k8 c5 X# c$ D
   write(fd,&data_write,sizeof(unsigned short));
5 _6 |# C7 \6 Z   
6 k2 W: m7 P& [( ~7 Y& V   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  + Y- G" h' p# i/ a! }- p
   read(fd,&data_read,sizeof(unsigned short));
( C# C% n; d& J& w4 D  {   & s' l9 y- V3 P% K% p& o
   if(data_read == 0x13Ec)
) B: m5 J" G2 }4 d9 P2 V0 g- N5 z   {
! T' Q3 w! F4 j! X- @   & n+ E/ ~- H# |; Z5 y. |  O
    printf("data_read = %x\n",data_read);
4 C: d- r4 N# Y% b1 d- K9 l  l; m   }. O/ {' \9 ^" i- c" E9 P
   
4 I7 ^% ~$ c) j, `7 _8 y   msleep(10);
! Z8 P; D6 g, r  
# w* n  E1 p1 m( h  /*8 r3 ?8 j% G9 t3 z+ x
   ioctl(fd,1);   
% w' U6 k8 c. | sleep(1);8 N8 }2 F4 q+ q- y" _+ v/ Q4 a0 y0 x
ioctl(fd,0);( \2 f$ a! l$ O- _5 u- O
sleep(1);
$ Q* a" d7 A0 F: m# U */
2 \5 r# v3 G& I; i2 n7 L  }   & W- u7 D9 U6 @/ G' t- @0 v" B
return 0;
' |+ z3 |; r  `/ u . q: _! _- m* Q, ?( T2 l4 t  e
}9 r/ e3 S  e$ H

9 }3 @3 M& S7 g, Y7 ~多谢各位指教,谢谢! 急
! z+ T! c) m- \) |  a7 S
# `2 g* S( ~1 }' ^7 n2 W, A3 s/ C$ M$ w$ u* Z+ k

$ r; D! V+ V, j: i1 ~' t; D8 V, w6 t  m, G. w

5 a6 v; @7 q9 \# I$ _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 09:21 , Processed in 0.049909 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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