McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 9 t: }, U! E3 S. I
/*' M6 l" J6 A: C3 m
* Copyright (C) 2009 Texas Instruments Inc
  j$ I: w& d7 e, h* z6 e: A *
7 x- M# A6 _3 h$ Y * This program is free software; you can redistribute it and/or modify
5 S- ^- i: i: K2 A * it under the terms of the GNU General Public License as published by
6 h' V! ^* L) ?) f * the Free Software Foundation; either version 2 of the License, or' ]& M( ^' p* m6 S+ B
* (at your option)any later version.- i7 X) S; c0 J: P- W0 v
*
2 C7 B$ j5 X+ v3 v * This program is distributed in the hope that it will be useful,
* k; \% }3 m2 F4 v * but WITHOUT ANY WARRANTY; without even the implied warranty of
4 h+ Q1 Y2 n) b1 }! i. M% r. ^  S * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0 e# \/ A' n7 h" P( s9 g% M% i$ H6 j3 Z * GNU General Public License for more details.
# o. k# g- p3 C *, k0 O! z1 l+ f: s6 V
* You should have received a copy of the GNU General Public License0 b+ h$ a5 o( T2 k4 ~
* along with this program; if not, write to the Free Software  F  t( {3 J* h* x0 g* u
* Foundati" f6 ~3 c; l" M, o7 c8 t
*/
  Q! T7 b4 g6 H1 D; t, D#include <linux/module.h>* Y0 q8 [- |3 r8 u' Z
#include <linux/init.h>
9 o2 Y7 D7 ~! Q6 H5 v#include <linux/errno.h>
7 r# D( k! h! U& E$ K3 a6 o2 d" F#include <linux/types.h>8 \$ I/ I* b3 z2 @
#include <linux/interrupt.h>
" o) k+ x& G6 t+ U( @2 X#include <linux/io.h>8 x; P* z- |, K! b
#include <linux/sysctl.h>6 r- _$ s- ^! m
#include <linux/mm.h>* r1 o( q5 k4 X8 L- e* F
#include <linux/delay.h>; p+ \& I  x4 G( H, N
#include<linux/kernel.h>
+ {( N2 t/ X0 I* t! h#include<linux/fs.h>' z4 C/ x7 o4 j1 C6 Q: u* p; g
#include<linux/ioctl.h>
2 h$ T3 d" t) f' j5 {- a6 S#include<linux/cdev.h>
) f( K4 c8 J6 K% }9 K# m: m, Q#include<linux/kdev_t.h>% B% s- Z: w. z: z3 w
#include<linux/gpio.h>4 @+ e* B) K' y9 X' ^
#include <mach/hardware.h>& o$ P2 i- y4 O
#include <mach/irqs.h>5 O1 S6 y7 S( i. S
* y7 ~) W( {/ E0 T  v
#include <asm/mach-types.h>
& n, s1 f3 Q- A+ G  o4 F& c#include <asm/mach/arch.h>
8 e1 T# Z  S7 r; N, `0 x* R#include <mach/da8xx.h>; J, T* j% c; R6 b+ C
#define  SYSCFG_BASE   0x01c14000& A  H8 x$ [! e# ~2 K; x0 a
#define  PINMUX1_OFFSET   0x124 ' f2 p. d& ^( v: f9 z
#define  PINMUX18_OFFSET  0x168
# U, v' _, \$ h& k' \#define  PINMUX19_OFFSET  0x16c
7 t! j$ Q. P, H0 e5 j' X8 u7 d" W#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR$ l  A* Z$ m% Y8 \- {4 s3 F
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
3 j% D$ R: S$ z#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
* ~6 v* H& S9 P5 m4 C# C#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR3 B  _6 c0 X* q+ o; u
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
- Y: s& E6 C- `                           
6 E* L& `: t, C, ?" Z2 ^4 V#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
' x, z& z# a& b7 W5 ?6 V- i8 U0 u#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
( ~  G: B% ]& l% |; e" H3 \//PSC
! h2 N2 X$ E( |/ ?0 }#define  PTCMD_ADDR   0x01E27120  ; r7 G) t" O7 c* E0 ]/ r* a7 Q
#define  MDCTL15_ADDR 0x01E27A3C2 r# m; w3 H+ G: w/ Z) v9 u
#define  PDCTL1_ADDR  0x01E27304( m1 ?! v. ~1 N5 H
//GPIO8 direction
+ V. h# `# h: q#define GPIO8_DIRECT  0x01E260B0
4 T) F( X5 ~( T7 k3 S) e+ d3 U2 O#define GPIO8_OUT     0x01E260B4
8 c% p5 }( Y( E8 E% F: h# f#define GPIO8_IN     0x01E260C0
' v3 y6 t' {) R6 p$ f+ s( \
5 k3 O- _- ~8 a, ^2 t0 T9 o+ U$ E8 i//#define MCBSP1_RINT    99              
' q9 r+ i+ a+ Z. H//#define MCBSP1_XINT    100  
' a' S9 Z  j9 H9 n4 Bstatic int MCBSP_MAJOR=239;
9 x' x9 d% T* S+ b* H7 sstatic int MCBSP_MINOR=0;1 a6 D4 @* y  N  Y
static int count =1;  Y7 g$ p; b. U! l! A& C

% e0 Y% Z! w( D#define MCBSP_NAME  "MCBSP-device"
- W( x2 Q, C% L( w; a6 Y0 M5 m, V9 e
static struct cdev *mcbsp_cdev;
% A9 a+ m3 C' Tstatic struct class *mcbsp_class;
  [; f+ k5 y% n7 H( b7 _static dev_t mcbsp_dev;
& H4 g7 E4 ?0 o; z. p- o& _unsigned int DRR_data;
: j# _( W6 Q* @" e; Vunsigned int DXR_data;  R: a  z& Z  _9 _' l8 X
static int mcbsp_open(struct inode *inode,struct file *file)) y8 i2 t- m  e% O# H. U7 {, X
{2 v: x3 Q' Q  u/ N( E! {
   
. t, v2 y. y7 z) _7 j7 X. T   //interrupt enable,initialized8 z' D% L" s/ H+ ]* q; ^4 M
   unsigned int temp;/ f* j0 N6 I' Y1 M  M* S% j
   //SLEEP_EN(GPIO8[10])---0: V. q6 R( \% L& O& A' Q8 W: `
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));1 _7 e7 E7 X! a- f; J
   temp=temp&(~0x00000400);
1 e2 `3 x1 [: V) K& `   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10], H+ t. }) ]5 J0 \2 v4 ^( G2 I
  //RESETn(GPIO8[8])----0----1. C, F4 w# T, k; A% O
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
7 T  d7 P' J* L- N' T   temp=temp&(~0x00000100);- j8 ^3 f0 }( f4 W8 z
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---05 F8 R( F' z* ~; M& P
   udelay(100);
' y! i4 ^  M# F+ |   temp=temp| 0x00000100;
8 n7 b% q5 x3 Q# e   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
% u1 q2 m$ v4 ]; \9 P- P+ e   udelay(100);& t! Y" v- l4 f
   printk("open success!\n");; G: a! C4 x1 |+ K( `0 G
   return 0;: s5 O3 U: o% I% `0 b
}/ z8 m$ Q& m( J6 L* [5 J
* \# p9 p6 X3 ~3 N
static int mcbsp_release(struct inode *inode,struct file *file)! A2 |# T# A  B5 O: g8 s  Y
{
/ K# N' j8 O" v5 W" n   printk("release success!\n");' I( M$ C/ R- s1 d/ @
   return 0;! T2 z/ }3 Z' l5 ^* ]
}
6 }0 W' t8 y+ J' B& l
$ }3 u0 l1 k/ w  W; Tstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)1 L/ q  t7 B" Z) |
{  m& J- a6 p. X3 A: m/ {, n- @" }, J
    copy_from_user(&DXR_data,buf,len);% a2 J! r: c. w* m5 m
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       ' S2 @* V; C4 d
    return 0;3 _5 N& e) G6 q  M6 v
- j4 o* c4 N) k, m8 `9 x5 q5 @
}
0 _& p2 Q$ ^5 ]: k7 g% @5 Y, i0 j5 p
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
3 M! G9 b( {5 C3 }5 s2 }0 b{ ; d3 N! t9 J- W
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
$ d# T7 Z- A5 g   copy_to_user(buf,&DRR_data,len); 3 V; W2 O9 W: \1 V% ~$ G5 e& Q
   return 0;
' N: ]: v5 h# G}% Y) H2 ^, x, V' T

: s- ?5 T3 {1 K8 x5 z" g4 I+ y
  d* Z6 r: V" z( T* P9 ?6 i) astatic struct  file_operations mcbsp_fops=0 a3 |# P) ]: a, Z1 z' x# r: t, q8 O
{
, g' D: b2 V) E1 [7 Y. N   .owner=THIS_MODULE,
' u4 N& x) F; V2 B( Z# U% T   .open=mcbsp_open,! z% e$ Q3 W6 K) r8 n
   .release=mcbsp_release,7 Q7 u, a8 ]  l0 u( U
   .write=mcbsp_write,, \; Q) K6 e. A1 ~
   .read=mcbsp_read,0 J: H) }# t7 L3 U( L4 ]# d
};- G: Y; X: j; |2 i# @; S  f
static int __init MCBSP_init(void)
, H: S7 F9 o$ W+ f* Y. ~/ S{
, O& y# @6 {' v' k% h: w+ Z: N% I- Z   int ret;4 V) g; \6 K4 K- Y7 v# R
   unsigned  int   PINMUX1_REG_old;
- E; O3 ^! }7 ^. x6 [   unsigned  int   PINMUX18_REG_old;
# F1 x4 b! K5 b3 H" I   unsigned  int   PINMUX19_REG_old;
$ K: s1 _7 G2 z' h6 j   unsigned  int   temp;  ; j+ v. K, E7 u; K7 O* s5 ~
   if(MCBSP_MAJOR)" E  D6 S/ |: L( f2 I8 H
   {
( N/ _4 c% _0 }. x: e8 `! O      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
, N" n. U: W7 k; Y      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
4 z/ X! @8 h- {" c' p/ \8 x   }
9 B; Q, a7 z* L3 F* M9 e1 q+ H3 W   else
  U8 a' E8 \2 u! y( Y6 i   {9 o, p3 P* Z) V: H
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
) `: a: c7 I1 S* ^( z. Z      MCBSP_MAJOR=MAJOR(mcbsp_dev);+ Y0 ]* _! M; s7 L- K. Q, k: S
   }8 k. w  g- W7 w5 N1 T
   
8 }/ q) s7 h* Y" D; `2 g' w   if(ret<0)9 `5 {% i  L6 ^8 n. A2 Z
   {
5 N% z( s+ v& f      printk(KERN_ERR "register chrdev fail!");# }5 H" ^4 d" w/ b' R
      return -1;
3 J- ~  Z5 A" p+ R6 q+ W   }
5 t+ g# c9 M1 \6 m   6 ^; A$ z0 t0 k. F& G* v0 `
   mcbsp_cdev=cdev_alloc();3 Q3 ]# y# O- D* \) y6 e
   2 N( @2 j+ z. @
   if(mcbsp_cdev!=NULL)
) \* A# T1 ?5 k- E2 b( w   {
# q8 o& {: B$ d) z' P' n      cdev_init(mcbsp_cdev,&mcbsp_fops);4 f6 u0 ?; v' D; U# ?" y* r% w8 P' N
      mcbsp_cdev->ops=&mcbsp_fops;
9 E( j& w0 R  f4 f8 U2 ^      mcbsp_cdev->owner=THIS_MODULE;% W+ s) q/ D/ q/ s* S/ ^
      
' r+ F3 N4 S/ F# _( j' W      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
, K1 s$ I; q  y! g; m5 H9 v          printk(KERN_ERR "register cdev fail!");
1 z$ x/ X; O& ?! h( x      else
/ }, n! F- Z* H0 Q& X* D          printk(KERN_ERR "register success!\n");; g9 T7 ~; D' s1 y$ r
   }2 w/ S% {; |2 S' J; i/ y
   else0 `  H! o4 |7 \6 k, w. l- v; {, R
   {! o6 v2 K7 [, H7 V0 g( v, i1 z3 r
      printk(KERN_ERR "register cdev err!");
5 w# w- F# D$ X" B1 n, {! F. z      return -1;6 J1 Y8 W  V+ t) b- k1 B% _0 o
   }3 y0 K  |2 \- H. G' S1 w
   
& d6 i3 l1 Y- `1 q  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
" L' B- K( |' e$ D4 W7 W1 N- H   if(IS_ERR(mcbsp_class))* ^2 `$ x7 m# C* w) Z+ _) O
   {
! k) e% _  P8 @& w      printk(KERN_ERR "register class err!");
6 }) w% A4 l/ y" g7 d   return -1;
0 ^0 K- F( b6 w. e( r   }
" N& R% o6 z' D3 ]3 m, G& D   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);0 E: q, P9 R* l
+ m% P& d. ~+ Y* d% T
   //PSC
* U9 K- s) h% e   //add Enable MCBSP- r+ g) `# f% o+ b' x. l! u
   //test
+ ^$ r' [& L3 X& y5 W   temp = 0x80000003;# S7 ~6 q& Q& t. k" @' M% k9 o
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
& Y: D! |& L! X7 ~3 L+ ^' r1 E9 n   temp = 0x00000003;( I; B5 e* p! @! c, [: F
   writel(temp, IO_ADDRESS(PTCMD_ADDR));# o& p' c6 R; l- F% T3 E% S) S

2 x/ ^; Z3 p# g   temp = 0x001FF201;
7 G* L; |, g) w   writel(temp, IO_ADDRESS(PDCTL1_ADDR));+ s; t: R# d+ p+ \
   
& X' g$ s8 L$ Z6 I   //PINMUX  $ d- a0 W+ I9 Z& T5 E% z' K) J
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,2 s/ [1 T4 @1 O0 G* B
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
: j: l* c2 `4 H$ C9 F, A   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   : ]  u* O0 M0 c! ?
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);# c4 m$ T5 [6 j+ A
   ; C( _) J$ ~( P+ B( [
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
! u9 b* u5 q: v   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
- r" |% @0 d$ h+ K7 R   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   ) T# n( e- P9 x
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
7 ~+ g$ S1 {+ c$ p
3 }0 a& X4 O" b3 A( [   //RESETn,L138_SHK2+ j$ n) W# Z( ]( I5 \' D
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  $ F2 `7 f0 D2 j- V
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   9 S3 I# c% [% p! D- ?* R: e) y& M+ a+ i
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  o9 n( \4 r, Y6 A. x8 Z
# {( l+ G2 o( }* [" `) u! F( |
& z6 q+ Z0 v& e
  //SPCR Register; N  c! M% W' V5 ]7 ?
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset+ g2 x) Y4 z, C6 m7 K- R
  temp = 0x03000000;//(DLB=0)
  O/ d4 ~& x  A& } // temp = 0x03008000;//(DLB=1)* Z5 p" A9 k4 h4 G
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset" d0 t/ O4 k2 ~4 Q+ t4 G' D
  temp = readl(IO_ADDRESS(SPCR_ADDR));
! ?' y& g# M; F/ v9 W1 o  printk("temp=%x\n",temp);
! J  k9 k9 j2 q9 A& [0 S 5 A+ m  M) O! P. f! T" a# L8 G
   //PCR Register
" ~0 M9 m9 W6 C& o1 R' }3 L5 u! x   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
! b- o) J& ^$ T7 w1 k+ k  // temp = 0x00000F0F;% V, D2 t1 X4 f. {
  temp = 0x00000B0F;
9 E9 W3 k( l, n2 {5 `+ z6 D4 T  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized   ]( V. h1 E) N& P- x( _$ Y
  temp = readl(IO_ADDRESS(PCR_ADDR));8 Q% ]* l* f( O7 ~3 B; b
  printk("temp=%x\n",temp);  
2 A& x; a# L3 W   //SRGR Register: X+ \3 N: e5 f
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
. o. w# i) O' E: J( S //temp = 0x301F000B;
1 N: W2 Z6 V6 o* z5 D' K) L   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
6 M1 K% E) m4 b6 E  temp = readl(IO_ADDRESS(SRGR_ADDR));3 d( e! L8 U1 |  `
  printk("temp=%x\n",temp);
' G. ?! B/ ]4 Y8 P   //RCR* W; f2 @$ p. ~8 d3 [% f4 Z
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
0 }2 L/ N9 t5 d1 T7 c: G   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0: I) e1 |. c3 l
   temp = 0x00440040;
- [0 w6 B) m0 H0 m/ q   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
. q- D; H6 @9 k0 u. I  ^) [   temp = readl(IO_ADDRESS(RCR_ADDR));
) V. `, e+ U; B9 U* ]! _5 S   printk("temp=%x\n",temp);
8 M3 G. ~0 [& F( c# k   //XCR. q( u8 k* j0 }3 w& d, e
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
- B$ m- z, |" F; d4 B   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
2 t( c1 z8 s& w' x, {6 Q5 s   temp = 0x00440040;
9 u4 ^5 Q: B8 U+ P   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   7 y% \& n/ M, d7 d, w4 s  ?
   temp = readl(IO_ADDRESS(XCR_ADDR));8 l7 E3 F# F8 ]
   printk("temp=%x\n",temp);
! r/ c, e% D& V+ m0 i# I' w$ A  udelay(100);$ X9 i  Y1 c6 s: \, ?2 m
  //SPCR Register& H/ v4 I( S2 u! S) s
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1: \' K- H2 U, w3 f1 ]
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
7 }2 y5 F' b7 h( F; E$ ]  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
3 z$ ^! F  Q) q3 a, D( }  temp = readl(IO_ADDRESS(SPCR_ADDR));5 n2 e- C, k+ M5 h- s
  printk("temp=%x\n",temp);
# @: D% {& q% H/ |8 H  udelay(100);  `! B' `2 U$ F1 c2 C4 K0 u
; E5 O6 F" P3 L
  //set GPIO direction
$ G3 X1 K2 h( F1 _6 w$ i   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));3 J* U) @( w( G! ?# c1 [
   temp = temp | 0x00000100;//EPR----input
4 U2 m* N- I$ C3 B2 a   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output. H( D0 B; W) @% J
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
+ \( @* a1 T  W. G
  g: T3 J& D1 j6 t   return 0;) V) Z+ z. ^/ z1 r9 R& g
}
+ t" Q/ V" b; G. n5 e1 O) ?static void __exit MCBSP_exit(void)+ Y: F6 W) a0 x/ i% O
{
" l9 Y7 z! a% k+ x   printk("mcbsp chrdev exit!\n");- C8 Y0 q8 V+ G8 S. ?$ u
   cdev_del(mcbsp_cdev);- z# o' ]8 d# m% K/ ?
   unregister_chrdev_region(mcbsp_dev,count);
2 Y# J: o" ~$ `   device_destroy(mcbsp_class,mcbsp_dev);
) l3 a# @6 U, a0 Q   class_destroy(mcbsp_class);
4 A5 ^  j7 ?- C( F4 J  R$ {}# @* `* W  Q( I; l
module_init(MCBSP_init);
: [+ Q0 x) B/ f$ Y% o; u& dmodule_exit(MCBSP_exit);- S: M5 N9 U/ z; \; \- g6 P
  Q2 a. q: o6 c) L
MODULE_LICENSE("GPL");
& Z  C5 _0 l$ B% L
2 d$ Y( E% I7 W2 h1 L" ?我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。. Q! E. L  K6 X8 V. r
我的应用层的测试程序如下
  O, q( G6 p: l) a2 a+ \#include <stdio.h>
6 @! V) o6 p! S; m4 H6 Z$ l+ h#include <string.h>
" {: E# m, o) G; F#include <fcntl.h>; H# N3 {) ?9 ^1 |
#include <unistd.h>
2 g' q/ D2 z* {* W( |9 H#include <signal.h>" z! G) t) Y$ S1 y' p( @
#include <pthread.h>       //线程
7 m4 S0 W+ ?1 K0 V8 F1 ^3 u#include <stdlib.h>0 k* i% x; [& T/ H5 Z
#include <pcap.h>          //捕获网口数据
( g2 Y" P: W: F7 M" r% j/ F  j# ]#include <semaphore.h>     //信号9 X' c' Z! y; q6 p) c# }2 D
#include <sys/types.h>     //消息对列
! r! {( H' N* n4 o#include <sys/ipc.h>       //消息队列
6 e6 d1 u% H3 p#include <sys/msg.h>       //消息队列
" |- e* E" |' N& C6 c4 t* n6 E& J#include <sys/select.h>
3 ?6 p; f" l3 a! H#include <sys/syscall.h>
7 A9 f4 B2 y' b; v#include <sys/stat.h>
1 \* i  `, u2 e1 T1 q! |#include <sys/mman.h>
1 q2 e2 H0 X% S( k9 f2 z7 y" e#define msleep(x) usleep(1000*x)
% S3 H1 z2 o7 n
/ a6 d8 v+ h7 Y  mint main()
) @2 K- n: i* t# u8 V- C{
. n" U0 y0 b+ Z% z. j  l    //MCBSP,ARM与AMBE2000交互设备
) Z! z% ?& t' X, G7 c" N int fd;0 ?1 I( j& Y+ ?$ X  f$ u5 J
unsigned short data_write = 0x5555;
6 Q4 Z. r& B& Z, R0 a% m4 u unsigned short data_read = 0x00;
4 K. b0 ?+ H. V! u) }  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ N' P2 @6 A3 S8 @! E3 v //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
. J2 p- l0 U/ X& ?, S0 {! g   
3 b6 Y0 g# N7 R; _3 I1 T# j  if(fd < 0)
0 A8 Y2 e5 M% t# i2 ~  {
2 u% v9 v- @% n" n4 r/ l0 h/ h. P     perror("open failed\n");- y: }( e7 ]$ X$ w' L/ J
     return -1;% h$ `- J% f6 T, k. l7 j
  }
: c. j8 K' r$ k. ~4 O  4 _7 \: R, I) D9 c4 }- d/ v
  while(1)  Q5 ~# u1 {: G! E' |# I$ K
  {
* b! ]3 p4 z6 U( R, s/ g   
6 n5 }+ n; Y) T9 p  O8 U6 o8 {# ^   //AMBE2000每次读写是24个字为一帧
6 |* A  V' \+ G! M% Y   //写数据时将数据在底层存储起来,等到中断的时候再发送
5 x7 \0 A5 T& ]. G0 C3 k# V$ t   //AMBE2000输入数据是以0x13EC开头的9 Y9 ]/ h/ \' H% ~3 s; g
   write(fd,&data_write,sizeof(unsigned short));" O$ a8 F7 _( e3 |2 `# C* L- B
   
- k* M* K5 t# v& a" \! s   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
( U& ~- [2 Z- ]1 w   read(fd,&data_read,sizeof(unsigned short));. R* e: P+ s% @, o% K! J
   3 H& c7 m* w  F, l" M
   if(data_read == 0x13Ec). r: d  Q( p, ]/ x9 M
   {0 ^8 m. Q5 I$ }) h
   
# h. L/ y" o+ i' n8 T! f, L: H, `    printf("data_read = %x\n",data_read);' t2 d6 G; R' h3 x: ~: u/ {# T
   }  D; R' k( T8 \- l" r+ t- T0 G( r
   
& H: M6 x, r; \   msleep(10);7 q2 ?' `" Y5 A0 F& E/ {
  ( z: t* _3 e0 v) ]) u$ F
  /*& a2 U: S0 {9 v. I
   ioctl(fd,1);   . I( Q! M3 Y4 r+ h+ r" k
sleep(1);
5 Q; ]+ [3 j. w1 R ioctl(fd,0);
4 Q7 Y# _" ?: y$ r) m/ d+ Z- [ sleep(1);5 n$ t6 ]7 d8 L" O0 i6 T
*/ ) E3 r4 e6 G2 H
  }   
, [' y4 R$ b$ L  ~ return 0;7 G# D5 e0 A# ?6 x) O' D' q. y
7 \+ S( D* v  c$ d
}
  v& H! c0 n- U% f. _$ v" m. w8 p2 S: O3 d/ Z
多谢各位指教,谢谢! 急' p( T5 X- c8 e8 b, z1 c6 [

5 }+ s3 k! I$ e1 |$ S! T/ _2 o% ~9 M; }2 }+ j
! }" P5 N# P9 u7 c" u: w( v
, f0 u" ]8 ]2 A& I* z! t& d8 r
  q/ P8 A9 u5 ~/ O* F# N" b: {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-9 06:36 , Processed in 0.048642 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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