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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 8 q2 z7 y% g  U4 X# w4 S
/*0 I# g, C" m  B) T0 `
* Copyright (C) 2009 Texas Instruments Inc
) g7 P( N8 s7 ~" n  e9 H' W( u! j, S7 m7 L *
& V7 h3 C8 y( t" N, z * This program is free software; you can redistribute it and/or modify
' x9 `' q  s& Z& t+ ~+ v3 x6 b * it under the terms of the GNU General Public License as published by
! g# v" E. a& S0 h7 e! E8 k * the Free Software Foundation; either version 2 of the License, or: e$ @3 |7 Y7 [  Z+ V
* (at your option)any later version.1 t% R& I$ e  O' Z9 j
*. b5 \% c# |2 p5 T
* This program is distributed in the hope that it will be useful,
. u3 |* X7 `& u6 P8 i) X* ^& r * but WITHOUT ANY WARRANTY; without even the implied warranty of# y' G/ D1 y4 `4 L
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% L  ?+ z- t. b) G& _* c * GNU General Public License for more details.2 v* x% M4 N3 B6 L* n
*
* R# {5 Z& W2 f- _& C, }2 O- K& I4 n * You should have received a copy of the GNU General Public License3 }6 e1 C  g. r- K. D! x% _
* along with this program; if not, write to the Free Software
3 [8 j& R: Z$ q' y$ l * Foundati
$ f" Z% Z; H0 @+ [( I4 r*/6 y' c2 N, y9 e" V1 ^3 O
#include <linux/module.h>
. S+ V9 w, ~1 g( C, g- U1 \#include <linux/init.h>8 Q( U, p2 d0 x$ i# P/ A
#include <linux/errno.h>. y( k  [, g* O
#include <linux/types.h>: c- @7 E" R/ X' K; j% H4 a
#include <linux/interrupt.h>0 w3 {; |& X' f& b7 B
#include <linux/io.h>
( ^- g2 q5 C9 @( j2 ~#include <linux/sysctl.h>! @- Y0 R0 M+ q  B# v8 y
#include <linux/mm.h>: U7 ], k0 z, W0 ]/ [
#include <linux/delay.h>+ x% j( y! A2 e% h: x
#include<linux/kernel.h>( e6 p1 h( q; [2 l+ z- B
#include<linux/fs.h>
! ?# C8 T/ ?2 d8 h. G#include<linux/ioctl.h>0 T6 N, E( @8 [. n5 f1 \# S
#include<linux/cdev.h>5 @0 `4 w: U2 O5 O! D
#include<linux/kdev_t.h>
' _3 K7 U8 d, O  B; N. J. c) T#include<linux/gpio.h>
, D1 Q* W6 D" w% S9 f1 {% {) |#include <mach/hardware.h>
3 K- {. F8 D4 r* \$ c& }5 p#include <mach/irqs.h>
* F# s, V9 U; n* X
: W) b; s- H. f+ M" d3 u. g#include <asm/mach-types.h>) k0 u. Q( z, u( n
#include <asm/mach/arch.h>
9 D1 c# U( ?9 u, Y- t#include <mach/da8xx.h>* R2 A: u# a6 l5 J4 S% I# Q$ N
#define  SYSCFG_BASE   0x01c14000# e$ n; }) \) ?5 v6 H! D
#define  PINMUX1_OFFSET   0x124 * c% M2 |+ Q( @
#define  PINMUX18_OFFSET  0x168
3 H( S5 \3 P. ^4 ^: ^' ~+ c# Y#define  PINMUX19_OFFSET  0x16c4 X! a6 D4 Q4 R+ l( l5 Y4 f" M
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR5 }+ a0 F: ^0 s" H- {$ [
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR$ c$ _3 H1 I- F, k9 Q& V9 z# |6 V
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR) s1 w/ }3 }7 Y8 j" @
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR9 Y" {2 ^$ r9 t8 M( I* R2 P. q
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
' _3 h/ S4 g8 D, Z5 E                            ! Y1 _7 s/ e  r
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
, p" W, L( S' g6 ^& V1 o/ ]#define DRR_ADDR      0x01D11000  //MCBSP1_DRR" _8 }7 }$ h4 `5 V/ Y& o
//PSC
3 N1 H# I; O/ l9 [6 L#define  PTCMD_ADDR   0x01E27120  * d- M: Q8 D3 P# f+ b" S# T
#define  MDCTL15_ADDR 0x01E27A3C. }+ |4 |1 }/ @3 A
#define  PDCTL1_ADDR  0x01E27304
# ^5 s# a7 A" i7 ^//GPIO8 direction* ^, S" ?) K6 N1 B
#define GPIO8_DIRECT  0x01E260B0
  m2 z- M. f: l( H- l4 h1 [# c#define GPIO8_OUT     0x01E260B4
- Q0 q( J# m& ]. z- j9 h#define GPIO8_IN     0x01E260C0
; b, G9 p! r; W: m$ U8 Z6 m, ?# Y' V  a+ s5 z
//#define MCBSP1_RINT    99              , o7 z& @3 l0 v3 z- |
//#define MCBSP1_XINT    100  " p& w! v$ z! ?* f: }5 i
static int MCBSP_MAJOR=239;
' C2 z4 j. b/ X+ [static int MCBSP_MINOR=0;
' j2 o5 e5 d% jstatic int count =1;
3 L( ^1 U4 [0 t& r0 L! n6 @/ E* ~/ L* l: R6 ]# d$ o# P
#define MCBSP_NAME  "MCBSP-device"
9 u5 P( U. q4 r: W5 [/ a$ z& H: n3 x/ u' X# E1 ~
static struct cdev *mcbsp_cdev;, E( ?* V1 |* X- M; E1 `
static struct class *mcbsp_class;
( c5 ~% i/ ^! c7 H, w' b; bstatic dev_t mcbsp_dev;
; b9 V4 K9 A5 g5 n& L  y# ~unsigned int DRR_data;
; R' ?' [. @; y4 m9 h& runsigned int DXR_data;
! Z: p3 x( H; ^# P1 \9 a8 T  ]static int mcbsp_open(struct inode *inode,struct file *file)
. F8 w5 R7 V* M0 f9 o6 k% ]$ y- u{
/ B4 h( s0 M* D& b' O; J   ) P5 k) }3 f! @: x# Q" W' y
   //interrupt enable,initialized; U5 S. _7 M9 u; c
   unsigned int temp;' q& d! [8 C9 i5 T
   //SLEEP_EN(GPIO8[10])---0- \9 e7 `+ P9 a0 u
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
' a9 C( I" Q" A# c$ v   temp=temp&(~0x00000400);, P. E: z' H3 A- P( T
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
: Q  o9 X+ L3 b, \; [  //RESETn(GPIO8[8])----0----18 u/ L' R& A/ \( _# w" b& @$ s
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
' _3 N1 T5 b6 l$ A; `! _4 F   temp=temp&(~0x00000100);
+ X# D/ H* `. j) N; c- \$ l   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0/ c# D8 @) F- |8 [: ?: u
   udelay(100);
% e& \1 x& f5 A, S# M   temp=temp| 0x00000100;6 C$ s, r  L) }/ Y7 r" ^; r
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
4 D6 p! p7 d. Z   udelay(100);6 ?' T$ G7 {# K+ x/ b- r' R4 e
   printk("open success!\n");& H/ G7 Q' j4 o# y7 b
   return 0;1 Y0 D% {; [& h' x
}5 ~5 ?3 M* }) r% x" j3 y. S% v
( _4 k3 k6 U* w/ u3 N7 v: ]! ?
static int mcbsp_release(struct inode *inode,struct file *file)" l0 g0 T% G2 `5 [
{2 t, @; e1 {: O2 s
   printk("release success!\n");
$ r! b3 k8 [2 @   return 0;
6 T) c9 M- c; u5 X}
2 H' r/ t0 ^( c( v+ q  t6 M8 d& @3 ?# {- E8 _
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)6 I# b5 F# [, `% h1 W& u: {
{# ^+ G; `: \5 A" }# F& X% s
    copy_from_user(&DXR_data,buf,len);5 q. Z" T+ O* r. J9 ~
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       $ J4 |* C: t8 ~
    return 0;, P/ ~( Z# a$ B, B6 v& c3 Y
& B( [7 z1 F& @6 B* V
}
  l8 z+ H0 v7 w7 d
. x* U7 B7 ^5 y. w! rstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)7 A; p" U9 \/ |9 D8 `. J; i
{ 9 E6 V9 }/ d# ?# \5 q
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));( _- t9 Q. J6 T  U  W* \( k
   copy_to_user(buf,&DRR_data,len); + f1 w" v! u2 \0 L8 D/ n# Q% n
   return 0;6 y8 p0 x' ~: y. y" P- ?; J, Q
}
: }& x0 f- p3 W! o3 e, _1 m, q" {2 B6 U

+ G( b# R, P* p4 g& Zstatic struct  file_operations mcbsp_fops=
( t9 \$ {# A/ _& L( ^{
. b" n" Y3 j7 R   .owner=THIS_MODULE,
$ C* \. D2 K$ R5 w  a   .open=mcbsp_open,, `" @4 j, X1 q+ r
   .release=mcbsp_release,
- n* C) u5 w/ b7 ]+ N9 J# g! h   .write=mcbsp_write,! Q0 z7 r. Z  I2 f, R. i9 ?
   .read=mcbsp_read,  B* r: G: u! ?8 v4 y2 i
};
' I0 i1 m) l$ @  ^6 p' G, G5 G* Nstatic int __init MCBSP_init(void)( R2 ^8 F1 a# b
{. H/ T+ b% a( z2 Y" l- |8 n4 z/ [7 j5 x
   int ret;
( o3 b2 I* G2 M3 G   unsigned  int   PINMUX1_REG_old;" X! k: u. Q$ P/ @7 x+ f+ a7 Y
   unsigned  int   PINMUX18_REG_old;
% r( @0 j( o) `# p7 n   unsigned  int   PINMUX19_REG_old;4 s: y8 M7 u8 U/ y) t+ X
   unsigned  int   temp;  
8 ^6 Q% L/ ]) l   if(MCBSP_MAJOR)- I' a4 J% P& a7 M3 ]
   {
4 b. Y1 s6 N& t: B      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);9 u$ z: ?' Y  U8 p: o' G0 v
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);) K" M- b% |8 i* y8 x" L
   }
! n) M5 m; |! a& k6 o0 ?   else
8 M: [* `& L3 x   {
. D8 R/ e3 D% a% j) F      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);9 F1 F, Y) ~) s7 w
      MCBSP_MAJOR=MAJOR(mcbsp_dev);) b) `# W  f, L; Y# i
   }& n; k0 k; O/ t
   
, C* W- |' P7 c- g3 P0 [   if(ret<0)
, {2 H8 Z) M# z; |; y" T  b   {) r9 f- C1 ?- P5 d: R
      printk(KERN_ERR "register chrdev fail!");) _* I( f# c( z
      return -1;
3 f4 o) K; g3 n5 Y9 x  D0 d   }4 p# n: i" I3 R' }% O
   
% P1 ^9 S: f) }/ D; `   mcbsp_cdev=cdev_alloc();5 E; A) s) Z: c# F$ I
   1 R6 N3 F& x7 P! P) I+ d, Q
   if(mcbsp_cdev!=NULL)4 a$ E& ~# ^% a' b3 |  Y
   {
/ w' w5 h) d5 `* W% f( e' S( ?, l      cdev_init(mcbsp_cdev,&mcbsp_fops);% W' x. u3 c0 S& @* j+ {8 c
      mcbsp_cdev->ops=&mcbsp_fops;* [* z" H4 F( r& q4 F4 V
      mcbsp_cdev->owner=THIS_MODULE;
( e7 ?/ d2 {& Y      - ~0 x' F# t% E7 [% b
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
8 v* x& O' [" I; U8 ]5 x1 `          printk(KERN_ERR "register cdev fail!");( E6 n/ i( |- |
      else4 c  X; I: l2 a9 @. h5 g; W
          printk(KERN_ERR "register success!\n");6 ]! z# g$ f) l* ]! x
   }
; @0 u* I" u) ^) u) Y9 x2 A   else
$ {3 [0 T( v  l$ l3 X! H, ?   {
8 H- _0 U- E  D* b9 y0 p% V. O      printk(KERN_ERR "register cdev err!");
3 c& B% d( @. a2 c" S      return -1;
. p; S2 _5 B. l% r5 ^% u% [   }" y& J7 t" O4 @+ P
   9 p4 @9 D) K" ~* @, Z0 \  b* s: {
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);4 n4 o5 W" g: a* ^9 N( }
   if(IS_ERR(mcbsp_class))) u; H8 k7 o1 v0 a
   {
+ x; b7 ]# D7 |5 F6 z4 _! t      printk(KERN_ERR "register class err!");
$ ?1 n4 H# P1 j% j+ d1 U0 v   return -1;8 u' X' g  O/ A& F
   }
/ e5 f/ `. V1 F' E. I# j. A5 K: C   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);3 s' a, I# ~1 m/ h- r/ E- P

% j; J+ v: I( H6 k  \& P4 A   //PSC" ~# P* s" d8 q$ Y' H
   //add Enable MCBSP- v5 U  p; a8 [( C6 C
   //test9 ]" F8 O" r/ Y1 I( \& t4 M
   temp = 0x80000003;
1 ^' ?6 `7 I* K   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
# r( \9 S- V+ ?# V) ?   temp = 0x00000003;
. w, Y, E3 X8 j' R: A: S   writel(temp, IO_ADDRESS(PTCMD_ADDR));
$ s7 a" [9 {4 e, w
! f" E! U' L# ~" \   temp = 0x001FF201;
! h! ~3 y! k: G( @, y1 w   writel(temp, IO_ADDRESS(PDCTL1_ADDR));$ U9 g: o& R/ j/ S/ ~/ ~+ g$ {
   5 y8 u0 \5 I# e2 r. ~1 b9 b: f
   //PINMUX  
* J" {; B* H- e% o0 A- P   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,- \" l& t7 }. r1 B' I
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  # r9 Y, K7 D$ C( W0 b: h
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   1 g/ d+ |# o" I) r! b7 |& @
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);- T7 f9 R8 x1 {/ \+ d
   * _. {4 {* e* o# u1 D
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
) n9 ?8 C; B* z2 ?! Y0 j! M+ f   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
; ?. Q8 I. O0 I: U- y   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
# G6 M4 w+ R6 f% F   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
/ T& G6 \  @8 H% a
( u: E% P$ ?3 p7 \) y) H   //RESETn,L138_SHK2  r3 f, K# y% r# Q% D7 \# B0 ~' p$ g( u5 J& v
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  , x, A1 a: a6 K; I' w8 m
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
0 X! D" O2 P$ C3 k7 W   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);1 w2 l, \4 z. ^& F2 S# M* d9 p
" K) y6 u3 i7 f
; V- X$ b8 B* i5 p2 M! g
  //SPCR Register+ J; u, a% W. k' i* B  K
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset- |( A0 y  a2 P/ d7 V# @, A
  temp = 0x03000000;//(DLB=0)+ A' V* v( c0 v; e8 P) b+ k
// temp = 0x03008000;//(DLB=1)
. t+ @0 R+ i- ^  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset0 V+ ]+ T  c" U- K
  temp = readl(IO_ADDRESS(SPCR_ADDR));" H9 N+ O" _% D$ @( ^
  printk("temp=%x\n",temp);& t5 ?  h$ k- ~

; _4 k: a) R" ~$ Y   //PCR Register
( F7 C) i) d' p' \7 M   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-07 k) U3 v) D/ l+ }
  // temp = 0x00000F0F;! w& ~  |; t- \/ r
  temp = 0x00000B0F;3 B' v4 L# d% \4 X4 H
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
# m6 ^2 H3 K. `' e! Q0 \  temp = readl(IO_ADDRESS(PCR_ADDR));0 E% b) P4 ^9 o% j; a0 V
  printk("temp=%x\n",temp);  9 Q+ x. D2 E) [) \2 ~
   //SRGR Register* b: p$ G; e  l! j6 x9 G
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
: [" H% g- n0 A //temp = 0x301F000B;
; c, p1 A: _! F$ R  ?   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 8 Q  `- o4 J; L+ J& h* }
  temp = readl(IO_ADDRESS(SRGR_ADDR));2 P9 S% S% W5 [: {% L
  printk("temp=%x\n",temp);
1 Q' f5 ^8 F2 r3 i7 B7 K* n: N   //RCR6 s. `% W! m" ]+ z& x6 @
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,6 A" o% {: T- A7 i' v
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
! X5 _2 T3 F# C7 L   temp = 0x00440040;
3 ?/ y2 F( A: F) O5 {   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   , o) A( X8 K% _4 m5 ~! M
   temp = readl(IO_ADDRESS(RCR_ADDR));+ G7 Y0 M3 c0 [- X
   printk("temp=%x\n",temp);
  k) \' [" W# D6 B( p. c$ s   //XCR2 u# B+ `: F2 m  Z2 C
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
. \* t7 c  H; K2 `+ d+ J# p! ]   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
. W) x7 l9 L( q6 J   temp = 0x00440040;
1 ]" }3 Y; ^/ k, S$ U9 j( }   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   ' R4 Y# d) X3 g" C
   temp = readl(IO_ADDRESS(XCR_ADDR));; \* X4 W/ w$ F$ l' J, C
   printk("temp=%x\n",temp);
8 y1 h3 M7 P/ s$ ?  udelay(100);) l, t/ N. q1 R0 o4 ]
  //SPCR Register  b. X7 U& f$ R1 x0 x! a9 H
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1' D1 S& M: `3 ~* `; B0 q
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
) P. \2 @" K4 W: f' Z! Q  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
0 L' }8 _! {/ M  P9 \1 b# n. z  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 E% r4 x6 _+ K4 R& J, e  printk("temp=%x\n",temp);
. W; e$ I1 n0 y  udelay(100);- ^) Z# f& D( L: L- C6 \
: ?  i" Q, i1 f; p" m
  //set GPIO direction1 v& E% z  o: H: ]0 U( V' R% Z( d
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
+ }$ v" j2 w9 J3 T! s5 B   temp = temp | 0x00000100;//EPR----input
  v, a' a3 E4 |7 G   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
- J; E0 @- {- J6 K0 B   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ; X1 h( I8 R9 p8 s8 x& ^

- L- Z) c& @; E  r   return 0;
* O% R" x: r6 G3 t# p' \}% l( B+ r- G$ y) {2 T$ I. Y
static void __exit MCBSP_exit(void)
1 J5 ~5 P% ?2 V{
! b. F& M/ j' U8 t: K   printk("mcbsp chrdev exit!\n");
- H! U* V3 X- K0 O5 N   cdev_del(mcbsp_cdev);# n% w; o4 t' i
   unregister_chrdev_region(mcbsp_dev,count);0 m" t* J3 x! t+ [6 t4 M
   device_destroy(mcbsp_class,mcbsp_dev);
# f0 g, z0 W& g+ m   class_destroy(mcbsp_class);+ N4 Y$ U# m8 r" l* a& ?
}' D* y! |9 K- Y: l! a, `
module_init(MCBSP_init);
2 V' u& B) V( i) b, n' P2 a- \. hmodule_exit(MCBSP_exit);
% X) f. g3 {$ e1 I- K( x% ?3 B$ W9 g
MODULE_LICENSE("GPL");
! X1 ^7 Q# D, c' @5 V4 e- o. {( O; p: G/ M
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
; X7 U# x8 F* i我的应用层的测试程序如下
+ E  x6 B3 T5 S& X+ \: O$ Z#include <stdio.h>
2 c2 s! ?. P# U& R#include <string.h>% t2 C7 ?+ L( {7 |, s" w
#include <fcntl.h>1 k3 J/ z# }! l; `& G
#include <unistd.h>
; [+ k* a& J2 L+ J+ o#include <signal.h>' Y9 w0 Q3 e8 Z6 I* A' P' ^
#include <pthread.h>       //线程' A" n' [  U& r0 t8 [
#include <stdlib.h>
. \6 a; x/ W" k1 u5 w2 w, G, ?. x#include <pcap.h>          //捕获网口数据
* M/ F) t7 K. Q#include <semaphore.h>     //信号8 M" b% i  K- x- M7 t: Y+ s, W
#include <sys/types.h>     //消息对列( s9 T# t/ U& x4 S
#include <sys/ipc.h>       //消息队列
9 A/ i: k, H3 V/ `#include <sys/msg.h>       //消息队列" ]/ Y, C: S* p+ |/ [  U3 p
#include <sys/select.h>
' f* [6 z, u' k+ e. j  f9 {#include <sys/syscall.h>
* V/ @& P% r4 g#include <sys/stat.h>/ j; @  w( }& E' l7 t6 q
#include <sys/mman.h>. A4 a1 _+ |  f' h
#define msleep(x) usleep(1000*x)" `, t: V$ ~2 r
( x5 r2 d: v* T: V; Y
int main()0 y- E, U2 g1 e- m5 p7 f  k
{ + p( N; G9 O/ F& z2 M- ^4 |7 q
    //MCBSP,ARM与AMBE2000交互设备1 C  h& }' i+ I- Y+ z+ m  l
int fd;
8 y* T7 S* H; H! w' ?' d unsigned short data_write = 0x5555;
0 p+ v5 B9 j8 u$ T8 s: N unsigned short data_read = 0x00;
$ r# p; _5 r2 S, J( M& |: B- b  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);- q$ R- g: h" i8 e* j: F) C
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
) H$ p3 s7 R9 N/ }* Y. X6 p% `      O+ }& C& @) ~  D6 b* g' @! s
  if(fd < 0)
! J3 j: X, Z% d! V+ k7 w' v  {
& X2 q7 ^8 U) O) m% x0 K% m7 ?     perror("open failed\n");
* w: }+ R' g- H     return -1;* K% o8 u: d  O0 m
  }" N# `3 J2 ~) M- }
  2 O+ _0 [- q9 v" a4 }2 Z
  while(1)
0 U* w+ Z& c$ T+ m  {, v: {7 s( T+ ]# `6 e/ \& X
   ' o7 K+ @5 I! r& r$ p
   //AMBE2000每次读写是24个字为一帧
+ z* w* O8 m5 V4 u   //写数据时将数据在底层存储起来,等到中断的时候再发送+ S7 C$ r: i3 l3 {2 h. ~
   //AMBE2000输入数据是以0x13EC开头的
6 v  T" _( y6 Z   write(fd,&data_write,sizeof(unsigned short));
9 o( A6 H0 c1 o# _: p& M   3 F* {7 w9 s# C5 I1 s# M
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
  Z. k( j0 T1 i% Y/ C+ C   read(fd,&data_read,sizeof(unsigned short));0 p2 ]" K5 y& {, v' ^3 V
   ! y5 L# Q3 w2 a) I
   if(data_read == 0x13Ec)
0 b+ s& H2 U1 Z& C% X   {6 J* b# b& Z9 u( V2 b
   
- ]! p7 x% o: {) E2 N$ F    printf("data_read = %x\n",data_read);
* v/ j3 n7 p# s/ Z  b   }( I2 V5 q4 ^: _" c- g
   : F/ M& H: [8 s/ L
   msleep(10);+ e' u: \) X1 N
  
3 J( k( U# V$ {& u! O+ ^) ~  /*
# s. P0 v4 H% S, W" v. `   ioctl(fd,1);   
5 v8 V/ r$ g+ F/ G sleep(1);
$ S* C5 ~- D( ~  c( d$ E9 _ ioctl(fd,0);
/ w  u4 C( u  u6 ~. `, T sleep(1);
& H( q) X  O8 B0 O" c */ 1 g* J% i2 ~  ~
  }   
* \. g; u% _# s$ c) ] return 0;
0 K: L' }9 @8 F3 {2 Y! f: s% J- p
4 l3 d' ~# X3 x. {7 P: [# V}
: X9 T* ~$ n4 {; v  {7 p) M( b; E: o9 P
多谢各位指教,谢谢! 急- W' p4 \, |: p  z  m% t
" Q, w( L2 d3 z! }
0 Q% `8 i! W0 j& i, j/ `3 C
! M5 p- O- X' X6 P
; y: M, Y" ?, \$ Q3 s% ]9 T, V! l

) F5 C+ C' X4 w4 b) [% ?* |4 S7 ^+ s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 01:37 , Processed in 0.041840 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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