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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: : i' F( L. I( ~5 I/ j7 S8 d
/*
" S3 D4 Q& n) r) x0 ? * Copyright (C) 2009 Texas Instruments Inc. I0 G" q, d9 |- p
*9 ]+ s% e/ k$ ~
* This program is free software; you can redistribute it and/or modify9 p) s5 H0 h" K( z3 u
* it under the terms of the GNU General Public License as published by& i% v  l. {5 J- V
* the Free Software Foundation; either version 2 of the License, or
; K7 q. f" g0 [, k9 A- ~+ e4 U+ z * (at your option)any later version.
: L2 F. J3 v( y. T% H. P: e  S) U4 C */ {4 ~' ?; |6 Y) v
* This program is distributed in the hope that it will be useful,
+ C" P$ M: u6 z. L * but WITHOUT ANY WARRANTY; without even the implied warranty of0 ?3 K; q5 ^% X
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
$ l( y% [% \9 n3 d/ h- { * GNU General Public License for more details.
3 T# Y- S! c. T: c6 R) \1 { *
! h7 a# w/ T; X: q% o * You should have received a copy of the GNU General Public License
! u+ m$ g1 j2 ?+ h5 L2 c * along with this program; if not, write to the Free Software  J/ n5 ^$ |3 f6 o7 I1 y( h4 v
* Foundati
9 E: {* E2 r- g2 ~8 K$ R*/
  }/ R6 X* S/ b7 u& D' c9 r( J#include <linux/module.h>% R; G: O: J0 W, q) {) p5 P# S
#include <linux/init.h>
! i6 c. l, m4 a, _; }+ b) n8 O; |#include <linux/errno.h>- }$ K- [$ n$ T  _8 Z5 a. Y
#include <linux/types.h>
! l0 N( g! H& N# ~4 M#include <linux/interrupt.h>( o0 Z3 R9 D- `$ [! k9 O
#include <linux/io.h>
. Z- S! [+ E$ H; R/ W( W* J; d$ G- w#include <linux/sysctl.h>5 K* k8 n- d. ]/ [
#include <linux/mm.h>2 o7 c1 w5 Y2 v: d; p& J# @
#include <linux/delay.h>
5 M0 M$ P8 k0 m# R1 o9 P5 E#include<linux/kernel.h>) K* r9 j, o  @7 Z  t: T1 m5 s
#include<linux/fs.h>; R. x: n% W' R& E6 Y% h9 o2 p; y5 F# H
#include<linux/ioctl.h>
/ E5 I* G3 p# T8 ?#include<linux/cdev.h>% I- |& [+ z; C* |2 z( x$ A( g
#include<linux/kdev_t.h>
$ @4 D( i5 X, D, h% `#include<linux/gpio.h>
! h. H! Q/ c3 L9 V8 e#include <mach/hardware.h>
! }% L4 s& W- b( s) p' V#include <mach/irqs.h>1 a$ W# K% w9 t1 y. e* J

' P4 n8 o  e5 p3 T  U#include <asm/mach-types.h>  d; m' W! k* H
#include <asm/mach/arch.h>
3 ?8 }& ]) E& t#include <mach/da8xx.h>/ y8 i. X% [1 J- ^
#define  SYSCFG_BASE   0x01c14000+ l9 k0 J& S# u1 Y8 F) V' E9 [
#define  PINMUX1_OFFSET   0x124 : B) F  T- g, L; F
#define  PINMUX18_OFFSET  0x168
9 k: _* B8 r/ Q  p4 @#define  PINMUX19_OFFSET  0x16c
6 X0 @" U# o6 u1 ^6 N#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
: A1 U* N: `4 N" I- N- G! {, N) W#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
. \& x" T- }/ f0 N#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR% X5 T1 n1 C& Y/ Q% v$ y
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
0 A8 Q8 j2 F* h#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
- N$ p# L) i# q# [2 _  L                            8 V: n% N( i% u# h' \3 n
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
  m/ m5 f, H2 w9 a' [8 o7 h6 H#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
3 A+ c+ z/ [6 h3 x$ y. \//PSC
1 v( k; Y# ^& u( ^8 I5 H' }#define  PTCMD_ADDR   0x01E27120  
" p: m* S+ S8 P- [( G4 Q& D" ^9 P1 a#define  MDCTL15_ADDR 0x01E27A3C7 Y6 S, r  z0 e9 s9 t' j
#define  PDCTL1_ADDR  0x01E273049 d! g3 O* Z- P5 p2 p" l/ U# y+ U; X1 r
//GPIO8 direction% O  v# Z# A5 E1 Z' m2 k
#define GPIO8_DIRECT  0x01E260B04 k/ f. |  o, z* }) ^5 ^  P
#define GPIO8_OUT     0x01E260B4
' [8 Q7 b* z* w#define GPIO8_IN     0x01E260C0
* R0 g/ \0 |8 q( M7 A) g+ P! h! b! ^0 J
//#define MCBSP1_RINT    99              
8 B; x, t* L! `* w6 X9 }//#define MCBSP1_XINT    100  $ X; y# K: t; B( v
static int MCBSP_MAJOR=239;
+ G( c4 _; P7 astatic int MCBSP_MINOR=0;
8 N$ n, G/ L, {: b. I- Fstatic int count =1;; D% A) W  W: t% c; w, \2 S

8 {' c4 n1 B7 N. g  o* l6 c#define MCBSP_NAME  "MCBSP-device"
$ J$ W  X1 Q7 c3 A  z3 E" Y/ i* l& h) J
static struct cdev *mcbsp_cdev;+ {% L' X8 t# H9 Y' w3 P
static struct class *mcbsp_class;
8 k0 q3 m) K* T# P+ @& M( f- B! t/ nstatic dev_t mcbsp_dev;
/ ~# s7 |0 N: ?+ g' vunsigned int DRR_data;8 ^) X9 }7 U9 b4 A3 w
unsigned int DXR_data;3 I+ {  @6 _$ ]! q
static int mcbsp_open(struct inode *inode,struct file *file)( N. x) |1 U" x" s
{/ r* y: o/ i; J: i& q
   
7 f3 h# w. |( o5 E) a' C   //interrupt enable,initialized
: e5 W8 O: B5 W8 Y   unsigned int temp;9 W7 c* N$ _  r8 P, ~6 K1 \
   //SLEEP_EN(GPIO8[10])---0  N( X5 G5 b) a* E& g
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
* T, ]3 a5 K' {  U# L) Y   temp=temp&(~0x00000400);& D5 L2 m) F; j5 H
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
+ v/ [- \1 j& p5 T# G% ?, n- q7 _$ Q9 A& j  //RESETn(GPIO8[8])----0----1. a: t4 @) q# d% [
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
8 o9 ]" x( I0 ]$ b   temp=temp&(~0x00000100);
# y2 e# X4 B3 w  K+ x' ?   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0" ]8 X3 ?7 |! Q! _
   udelay(100);
4 q. f8 L$ R# r4 c" i' t7 T, S: J( Y   temp=temp| 0x00000100;9 c1 ?$ X# o5 T: r- K8 b% |2 x
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1# o$ F4 X# h1 w: j
   udelay(100);* v6 R4 [, ?" L' ~' x/ r
   printk("open success!\n");
* u' {. g" ~, l+ f   return 0;; I9 }6 @' l1 c, A  }
}8 r5 f! C* H5 u( c3 u

9 a9 M% |& a& O2 M. v; o7 [. g: {static int mcbsp_release(struct inode *inode,struct file *file)
4 a8 z; L8 `* o! H  H{
8 b$ S( h' H+ V: ?+ q4 T- d9 {   printk("release success!\n");" C0 @+ Y: G, l  p& \! D
   return 0;# \/ b* _. }6 ~+ e" G* p% [) R
}
, f  I; O* W9 R; P& E' e
# R1 w# t+ ~6 Q: Ostatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)9 Y' [  g2 @; ]
{
4 L9 S# q; |* R" @  X    copy_from_user(&DXR_data,buf,len);' m# g  V3 m- G+ B3 ?2 k
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       ' n8 I" a: m" z2 C
    return 0;
, i8 x. i1 W  n; j, U& L) j; t
8 a0 s, C( m1 |0 L5 Z$ F9 D" {}
% S3 A: n1 z9 E+ V. `
" Y% K# ~' U; a8 t9 Sstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
+ b7 q5 K7 C. E{ . R/ ~- R  b; P# G; ^% a9 V
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
5 m( B% q. d8 l! {6 ^4 j0 Q8 K6 A   copy_to_user(buf,&DRR_data,len); ; l+ U0 L. h: V/ F6 k1 ]
   return 0;5 u  f/ w3 t, D8 j: e  [# k, M0 T
}
! s, E0 I$ o2 l9 \" J
/ E+ `+ V) |* d
. L. U7 V# }( F  q9 f( y1 G( N1 Qstatic struct  file_operations mcbsp_fops=/ n3 _- g4 j6 a
{( C, `2 T, i; K$ c" D
   .owner=THIS_MODULE,0 X% N0 ~% y  {
   .open=mcbsp_open,: M, F) p+ M  u+ `7 U0 L
   .release=mcbsp_release,
* p/ A9 X& `* q   .write=mcbsp_write,
' \7 s2 r4 t; I$ y9 V; {7 X' @4 D3 U   .read=mcbsp_read,
) J# J& [9 [' d' }: h};( M% Z. e  R9 o: V/ {: w" J. L
static int __init MCBSP_init(void)2 Y. F4 ^  I- T$ U0 l9 ]
{& z: w" d8 G4 b2 l+ u, j  g! W
   int ret;2 ~, o' }. k" v5 m( [# V
   unsigned  int   PINMUX1_REG_old;
9 y3 n- d' w, p8 W. O3 K   unsigned  int   PINMUX18_REG_old;
( c$ p1 u$ j- I% X# H   unsigned  int   PINMUX19_REG_old;: U  j4 A) N/ o7 h' q7 k- `3 }* K3 s
   unsigned  int   temp;  
: A' f5 Y. @! X   if(MCBSP_MAJOR)! g8 T% Y. E$ T5 U- y
   {
6 l, D# e9 c- e- Y4 P      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);0 r5 B  |1 @0 Q8 w3 H) W# H# P
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);3 I" ~$ q8 d) ]
   }
4 k5 y) L$ x9 n8 c, O2 g   else
  Q; p2 w" I* L* e1 ]$ G, n   {
" L( x$ T* C+ E; D4 T+ j  A      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);& I& h- b! D7 V: B
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
/ O  e' r; P  E   }9 b# C$ f$ L! d5 _
   / _* M  P( `0 f3 O
   if(ret<0)
! |0 V/ j) X/ ~* u6 L; w* i   {- ~' t, G% o2 C+ Q
      printk(KERN_ERR "register chrdev fail!");
( t; a0 |5 ?/ V5 H9 f9 C* o      return -1;
' x; A. Q: d- t1 K" P* p0 h   }5 e1 g( t0 q" J+ U0 e4 U1 Y
   8 l& z& M6 R; f8 o& `
   mcbsp_cdev=cdev_alloc();
0 R7 K2 F* y1 m* K   : F( y& D3 g6 n, A7 `3 ?1 L
   if(mcbsp_cdev!=NULL)
: n9 |1 J0 a& r7 R" n0 o. ^5 \   {
1 y1 c) R% ?  O" |2 J      cdev_init(mcbsp_cdev,&mcbsp_fops);' X7 z- {% w6 a- g
      mcbsp_cdev->ops=&mcbsp_fops;+ z! G# i  q5 v, F* J
      mcbsp_cdev->owner=THIS_MODULE;
$ M: N. s5 B" P9 Z3 G      
; \9 P$ k5 c. m& u      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
3 Y! l8 ?- n- w) @3 }          printk(KERN_ERR "register cdev fail!");
: a( G0 @2 W6 e$ a" V- q! C% G      else8 V0 R. o5 [8 n* S
          printk(KERN_ERR "register success!\n");
  f: g; K+ N: H/ c   }
! X. r* {* z- H* j# f   else, q& l' v  Q5 ^" n- O
   {
8 }  o: w& b: {      printk(KERN_ERR "register cdev err!");; @7 A8 ?" \8 p; O
      return -1;& a$ T" _* e) G: t5 l
   }
3 o+ X1 N7 b8 d   2 I: \; }& H, e. }
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
2 t; X% J: H6 m3 ~+ B" i$ X4 O5 Q* M   if(IS_ERR(mcbsp_class))5 I' T* |1 I  L1 w* B) t& F8 `
   {
  J0 Y+ v% y' w7 C% m6 M8 J0 T      printk(KERN_ERR "register class err!");$ R4 M4 B" y* E8 }3 n$ I
   return -1;
7 W" b( h5 F/ y+ T, {% c   }& D1 E, {& x% t0 s
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);+ I5 W& H  l/ I/ N! `* P

2 w( R3 R4 b6 m$ ]( ~   //PSC
& s  w' z, Y6 \   //add Enable MCBSP
4 S; h$ P' w- _: |   //test3 o: P: e- [5 u4 a- ^
   temp = 0x80000003;# Z9 J; S2 E7 {% J' `
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));" D  p  T$ U1 n: Z
   temp = 0x00000003;
+ c' u+ A& b: Z- z   writel(temp, IO_ADDRESS(PTCMD_ADDR));
9 @8 X5 q" r0 |7 b5 e, P8 h 8 c1 K% C- o* W- o* j' {' q- n3 P# y
   temp = 0x001FF201;4 @& y9 G4 N* g& a1 M1 u
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
# r5 e5 n; i" g9 A. P# U! u& U   ) `/ z/ u; u# f9 Q
   //PINMUX  ! R3 J, ]8 j$ E
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,% K% {8 a4 k' f
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
; ~3 S9 q% b& d4 B0 R, @$ q8 g' w   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ) b7 ~/ Q2 j6 D, E
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
, _% `: p9 i  p# s   
$ r& `' q+ r" Y. i: A4 w   //SLEEP_EN,EPR,L138_SHK1,L138_RC
! I6 u; @$ b, V8 [   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
* n! v9 G. I: P3 Q* H0 a   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   * \, }7 ~6 E. w/ \  r1 v& p
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
; _0 S9 |/ x$ j' J - K3 X$ H: C# p; k! T; r; P  P
   //RESETn,L138_SHK2- H( S6 E. r) x9 z! [
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  2 |1 T3 q7 u, V8 G/ I+ N
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   % K$ O: w1 c% o$ t4 f) E
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);% c, D) i3 G# p, l8 x

; H7 @! ?3 R( k5 X" W  S . C7 Q3 ~  {2 u
  //SPCR Register
5 a* A# u' W% u) ], I  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
* [# Q% ~/ z/ {4 X  temp = 0x03000000;//(DLB=0)
, ^- ^- v9 `) L% Y1 n8 L // temp = 0x03008000;//(DLB=1)
3 }1 i5 n& f8 Y$ w3 z0 ^  k9 ^+ [# d  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset4 H$ W2 {, v- [6 E1 S  q+ d" E
  temp = readl(IO_ADDRESS(SPCR_ADDR));7 l: v2 Q: R$ i! ~. r0 z' {
  printk("temp=%x\n",temp);& X2 f# F- M. W
& D' N1 o# t- [
   //PCR Register
* a# y5 p; K+ P1 b+ N1 q   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0# r; ?8 _) c6 n$ j+ E" K4 c0 R6 ?8 I8 p
  // temp = 0x00000F0F;& g3 b: z' q' O) V
  temp = 0x00000B0F;
* L4 p5 Y4 v/ k( H5 ?  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
% @/ }3 W5 t) `' ?" _. ^; a  temp = readl(IO_ADDRESS(PCR_ADDR));  I0 Y% `6 @7 r) k& d
  printk("temp=%x\n",temp);  
6 {% Y1 e+ W  t# R$ o   //SRGR Register1 U6 Y' V+ D0 l" L4 t% w- [1 ~
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
  [) i( Q3 f+ i3 ^ //temp = 0x301F000B;
* x* l0 P5 o; @5 B) Y   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
! D2 Z& j1 P3 _0 b1 U7 F  temp = readl(IO_ADDRESS(SRGR_ADDR));9 i) S) V( M1 m
  printk("temp=%x\n",temp);7 H8 |  k0 ?; x1 P, w8 ^
   //RCR. b" r" X% q) ~) t
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,7 G) _8 T) T  `
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-04 T/ P: v& Y7 n+ |$ A1 N
   temp = 0x00440040;  [2 M( N, i" t# `4 s
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
; A( p* K( f) g" i% c   temp = readl(IO_ADDRESS(RCR_ADDR));
, I+ p+ i$ O1 u  H   printk("temp=%x\n",temp);
1 Z  W" A: O( l: x  H- a5 e   //XCR% [8 Y! R  x& l. c
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
9 ?6 m: m/ t0 R   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
7 ], e& u/ O- h' U7 O. w   temp = 0x00440040;* K& {$ V; I& G+ q
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
* u. Y% W4 F; u& a0 W   temp = readl(IO_ADDRESS(XCR_ADDR));. t( F4 m7 I1 y9 B
   printk("temp=%x\n",temp);
" Z" Y$ ]: L7 p% D- j  udelay(100);4 ^8 Y- R0 ~/ C$ d. m
  //SPCR Register
* h2 ~6 z3 o) ]3 r  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
5 _- y5 z) t% t" O+ a4 ^6 d  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
# M: c) @+ A" q$ z1 M  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled; x' l+ I( l  }" U/ l! V* B# v
  temp = readl(IO_ADDRESS(SPCR_ADDR));; S/ U+ A( U5 R* m# d' V
  printk("temp=%x\n",temp);4 J" o7 f* o- b* D# J1 R7 }( ?
  udelay(100);; L. G# L' k/ Z1 L" p+ V
) i* i- m5 O# o4 L3 g
  //set GPIO direction" N- R7 ~/ a! w, x5 T9 A
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
8 g: j3 y% ?! R2 Z   temp = temp | 0x00000100;//EPR----input& {' u4 g! J& T( B
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output  U" w# V9 h" U+ ?( B& e, b' g: m( a
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 9 i# P! b# i+ A  j; C8 f! a

+ O8 P5 G. A: ^" L' i2 ^! ]   return 0;
0 \" Y5 I. c8 u9 r1 S  u}
3 t! Y+ H. @$ B: p( kstatic void __exit MCBSP_exit(void)
/ a4 _( T2 B: H8 ^; O$ G{8 y6 [6 q+ x* e; X0 c
   printk("mcbsp chrdev exit!\n");/ i1 {5 @- o# G
   cdev_del(mcbsp_cdev);
$ \! `+ y6 t) G$ Q5 e# t1 |   unregister_chrdev_region(mcbsp_dev,count);7 @) M6 K, B( ?& n8 Y
   device_destroy(mcbsp_class,mcbsp_dev);
8 Z, g# z4 T3 V) t5 T1 {   class_destroy(mcbsp_class);
& s# h! N! R* }" o+ E2 B}9 I2 ]) e8 X: {" U: ~* v' _3 p  f( z8 Q
module_init(MCBSP_init);& |& H/ d5 p0 a
module_exit(MCBSP_exit);
! Z' `* J/ N; E. Z! a, g" @. B; [( F- f
MODULE_LICENSE("GPL");: U+ v* {! B& t& C; y( ]4 ]
) v6 c1 l1 p* f" A' G/ c; O
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。& n. l9 F+ S0 q* W7 `" A
我的应用层的测试程序如下
! `4 @0 F2 T" ]0 G#include <stdio.h>! {5 V, P& V+ R
#include <string.h>
: o+ n/ f5 c/ C+ g* O  T% A#include <fcntl.h>
: Y2 S; x$ L0 W3 j#include <unistd.h>
+ z0 q$ }8 j9 a: r2 B% z& b#include <signal.h>
- {' p) Z. |' d#include <pthread.h>       //线程
# E' \& S3 x' q- M" h5 W#include <stdlib.h>
& c) z( b7 ~3 h" y#include <pcap.h>          //捕获网口数据
8 n7 l8 {: T5 T% _$ D( t! v' g# _#include <semaphore.h>     //信号7 V8 \6 O2 D5 {* ?% G0 \
#include <sys/types.h>     //消息对列
4 {/ j; e% t; V% \& X7 ?/ h#include <sys/ipc.h>       //消息队列) _% s# O3 ?! w$ h4 Q; H
#include <sys/msg.h>       //消息队列
+ N9 k) V2 i7 J# `7 y#include <sys/select.h># @9 e# r! m  E- l( }
#include <sys/syscall.h>$ c; @6 i, Q; J* H
#include <sys/stat.h>
3 g* [2 y/ [% P$ [5 d/ R#include <sys/mman.h>- F! t$ e2 y/ X) h& @8 w- _
#define msleep(x) usleep(1000*x)
+ X1 n8 l, u+ J- ]$ `2 G) n
5 W' A1 X8 b# d# {! r% vint main()
" \4 Q$ h: R* C" ?{
3 L2 O. F6 X0 d3 I    //MCBSP,ARM与AMBE2000交互设备5 s5 s/ q2 V/ r& W  b* t
int fd;
& K4 a  U: A/ j' H5 [; J unsigned short data_write = 0x5555;7 m/ d! ^8 ?4 L( U' B5 r9 ^! x
unsigned short data_read = 0x00;0 z: Q, a. q  ~% u- K1 K
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);4 a0 t+ N! L: F1 V. n3 Z. ?
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);% d4 |" F$ Y5 P; D) K; V
   
8 C# ^0 L, |7 |6 L  if(fd < 0)# E( ]* B" O/ U! l' ]$ a
  {) V! w/ r* k3 n' t. ~
     perror("open failed\n");
% N9 E% w* c# _5 l     return -1;
$ E$ a8 e+ Z. }% ?7 b) s. z, `  }
5 U2 [  d' a! L  5 Z: e# [6 H3 A. [" T$ D9 `, `
  while(1)
! w4 h6 O. J. h1 N# H  {) a' _0 A# b5 O/ H
   8 l7 T+ h" T, H* `! i9 p
   //AMBE2000每次读写是24个字为一帧  m4 h) v* [2 L/ f: |+ J
   //写数据时将数据在底层存储起来,等到中断的时候再发送$ t  V& H  I7 Y# ^4 z2 u
   //AMBE2000输入数据是以0x13EC开头的
1 n: e; n! o( V% ]; a$ Z( V   write(fd,&data_write,sizeof(unsigned short));- Y% U0 H! o" {
   
+ k+ {, d; }+ W8 P& |  I$ G2 B   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  - X6 y8 ^3 k# S+ U, m
   read(fd,&data_read,sizeof(unsigned short));  ^+ ], c4 m5 z& F3 E% a, S/ t
   . t# n7 C" }7 ?6 T
   if(data_read == 0x13Ec)
6 v( _% |8 ]& `) B. R$ Q   {
* V4 J3 j: |% |4 \# t8 t   
; r* t! j. Y: h  W8 i    printf("data_read = %x\n",data_read);
7 e' g& M- I& l9 Y- J/ ^, S   }
# `/ U4 a" l6 J   
0 D9 t6 d7 }1 r3 T% s   msleep(10);
: w" H$ E1 o7 u2 s3 u! x) ]  
1 \2 w% P  B# @  }7 Z$ y8 _  /*) o8 @, ?+ o* t$ x
   ioctl(fd,1);   
$ k2 ~+ {( t1 b  x: p% G. M2 ? sleep(1);
5 V& t* e5 ~! `$ U ioctl(fd,0);
; q( O/ F* v. p: `$ ]+ g, f sleep(1);( w$ m% S, q7 p, f' ~: e  H4 \+ M
*/ ' C# Q# w, {& l: @" v: k8 D
  }   7 F; n, r' r# ?' L
return 0;  O& q5 [) c5 `! S
: ~5 R0 n0 D; g7 ^- |9 _! P$ u
}' B4 u6 @1 q! ]6 s2 j  `3 ]# g

- A$ I% O7 W- e& R/ W6 _多谢各位指教,谢谢! 急/ g1 s! ]8 R, v8 Y# o  r  G" @

; U4 Q  q2 `* Y" R' v5 T  K
& p) e% z' h: T9 X$ q0 f3 b& B% s  [

: R! f- q" y4 }; h( s* T0 V; z5 q% E7 T- n  A: ~; P4 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 22:45 , Processed in 0.054511 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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