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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: - A  ?. b1 n2 Q4 s$ f
/*
5 t7 n3 x& e+ Q- q' _0 _2 @ * Copyright (C) 2009 Texas Instruments Inc
" F& Q/ @" ]. o7 }( V  v8 d *
. G( ?' P1 B( K% _ * This program is free software; you can redistribute it and/or modify1 |/ \. @* Q" \& g$ N  d
* it under the terms of the GNU General Public License as published by+ w  n( o4 {  W9 U& |$ j# p
* the Free Software Foundation; either version 2 of the License, or
! y( q7 \! A6 C9 D/ D  r * (at your option)any later version.
7 ^' H$ U( h& U1 K *' f9 n9 _, C+ F; I: D" m+ \5 _
* This program is distributed in the hope that it will be useful,# f5 l6 I  n/ Y, C- O
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* b& S7 P% @5 ^6 d, ^: ~ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
& e" m- m* M% m& X * GNU General Public License for more details.
- y4 g0 M! _% Z5 n- S( Y *
; P# \: x* E8 V; W! P8 r1 R9 r$ K/ N * You should have received a copy of the GNU General Public License
) w$ C: M3 y6 N8 o * along with this program; if not, write to the Free Software3 u& a' [( C) r% z7 n5 P% K2 M. T
* Foundati
+ l0 a5 M; D( m/ H*/' u) k* a8 |( F* a6 t$ m
#include <linux/module.h>
5 J  ?: B7 b' h  g4 W1 J8 x3 X#include <linux/init.h>! a8 @9 D, ]7 X6 I) q& L8 C
#include <linux/errno.h>" d2 r# v& [! u4 i6 b
#include <linux/types.h>
% m8 a: T4 ^  L; c#include <linux/interrupt.h>
+ ^; Q6 D: F1 D1 X9 [# n#include <linux/io.h>5 F+ M. Q) e2 q3 f& _% C$ v: O
#include <linux/sysctl.h>
$ j1 o: t0 l+ N3 P#include <linux/mm.h>4 h4 H/ z* B3 `7 f* ^+ i2 l
#include <linux/delay.h>
1 E8 k  ^1 q2 I5 C& P3 n1 y#include<linux/kernel.h>4 k5 \6 d: V; v
#include<linux/fs.h>
' k3 \: e, m+ X) O( F8 |#include<linux/ioctl.h>" ~. R  d; _6 r  z# ]
#include<linux/cdev.h>
0 X' A% X' F5 S#include<linux/kdev_t.h>
" I8 |& k6 |1 i* p2 {#include<linux/gpio.h>
; A- \( V* Z+ d  P% X: g#include <mach/hardware.h>
: \1 D4 n4 S4 e! Q/ v( a2 k#include <mach/irqs.h>8 B9 k# b/ {7 K( ?
9 _. K+ m9 K' \. ?2 w
#include <asm/mach-types.h>
: c8 u( r  i7 D#include <asm/mach/arch.h>. v; @! S, l! \/ N9 G  D
#include <mach/da8xx.h>
/ m, x- O$ @6 T" I3 j+ d#define  SYSCFG_BASE   0x01c14000
' P6 Z0 K, z3 z1 L' |#define  PINMUX1_OFFSET   0x124 5 j. f8 x7 O8 Y( ?6 W
#define  PINMUX18_OFFSET  0x168
7 w7 F1 O! Z- }#define  PINMUX19_OFFSET  0x16c
' U5 H4 y% N. i1 e#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
. e6 f4 ^- t) e$ L#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR+ f& E$ y4 O, l( ]: X5 L
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR/ s1 c" Z# {) c+ _% X- B
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR0 P" R2 M# b$ Q2 e! f7 J/ n
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR, h) v# Y2 l& i' T1 }
                            . ?  D3 ]; j% L- `( K
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR8 r7 [" W! z5 _, A- j: V3 ^0 z" ]/ a
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
! h1 R4 n, s4 k, y//PSC$ A, j5 f# G. w! S
#define  PTCMD_ADDR   0x01E27120  & h' k8 R" P; J9 i# y
#define  MDCTL15_ADDR 0x01E27A3C
, L. n+ {# r0 e/ V#define  PDCTL1_ADDR  0x01E27304
5 o$ O' c! P& b1 N. K) q//GPIO8 direction; u. g9 g( q  {; B) B/ N
#define GPIO8_DIRECT  0x01E260B0) B: \" L  X7 e* ^8 v
#define GPIO8_OUT     0x01E260B4
  S8 F2 U: {$ y0 j/ s+ F  F* H; Q#define GPIO8_IN     0x01E260C0; r( V3 z/ w1 y. C
, x, u2 ]& F3 |4 [* ]! @
//#define MCBSP1_RINT    99              
) d9 J! j8 N2 m) N9 P; v" i% D: i//#define MCBSP1_XINT    100    l. U, P5 W4 A' a& d) u# g* t
static int MCBSP_MAJOR=239;* z7 r; ~+ |; K' f
static int MCBSP_MINOR=0;/ q. E' i/ F# b3 |. k4 c) @/ E$ g
static int count =1;$ k3 m1 ~5 ^1 V! c/ Y

/ O. Z' {2 I* J+ @8 Y#define MCBSP_NAME  "MCBSP-device"
" D( p0 d1 o) U/ e/ R/ {4 i6 d0 S. N) c/ r& H7 |
static struct cdev *mcbsp_cdev;
9 t8 V9 _0 F4 r" c' lstatic struct class *mcbsp_class;
4 V. V2 x: y  G  P2 o( lstatic dev_t mcbsp_dev;
) u& ]1 P" a0 K9 ^unsigned int DRR_data;; D7 a& O+ ~. L  p( \
unsigned int DXR_data;  P: x9 n- q2 ?; e
static int mcbsp_open(struct inode *inode,struct file *file)" e6 i7 _, E& ]4 l" ~" z
{$ D! ]: Y, I- X/ W; @
   , j0 Y& j8 P# O( l
   //interrupt enable,initialized- c, W8 V' I$ k6 e
   unsigned int temp;9 b5 K8 l) \$ z
   //SLEEP_EN(GPIO8[10])---0( X6 `" B- z' Y1 V
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));, ]+ E, }0 v6 o! ]. n9 a
   temp=temp&(~0x00000400);. B. C/ @- l- `5 Q2 _' t; F$ _. A
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
% r# i; d0 g" w  //RESETn(GPIO8[8])----0----1
( `( k% n4 q9 Y* K3 V  m" k   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));! ~$ b. J9 y, D7 G, D
   temp=temp&(~0x00000100);# z! c* v9 N$ R8 l0 W% Z( b2 l
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0* J: T6 W9 ~+ k1 T" `
   udelay(100);
* I( c! ?7 v! F' x: y. a/ _# Q% z   temp=temp| 0x00000100;% P, `2 h& ^2 D+ T6 L# u
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
. E+ R8 ^( @; {  c' S+ S( [: U   udelay(100);
! W, ^; j/ G) U, ~  {; y8 l* K  W! b3 K   printk("open success!\n");$ s& F$ s, Y; i0 F$ S% j( c
   return 0;
1 a" ?$ @$ o8 u% j5 o) g  {, @}
' s7 Z% _9 J1 _6 D: |% j2 I3 _& K* K! s7 S
static int mcbsp_release(struct inode *inode,struct file *file)( ^% N# I: \2 [( v2 ^! k) R
{
+ a0 r0 u- `; Q2 B' H   printk("release success!\n");
# N. C% w4 y& z  g& Z2 Q   return 0;( z& A# @0 r8 X! Y
}
/ [) |4 h$ P) A" h5 ~% X* |6 D1 P
2 }+ T& M' P# ^9 N( p, Fstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off). H# A; p! O! ]% n. y" C8 L
{
& t& C- H" X3 `; ]    copy_from_user(&DXR_data,buf,len);9 b( X, Z" J3 Q
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
8 C+ a! T: b5 f8 L, q1 |% q    return 0;
: O* v' \( p- n/ { - N9 r  z2 Q, @2 o, q0 J/ Q4 x
}3 `" w" J2 l  v# o  X
, S/ a! q; q6 M' C0 W3 A/ b
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
. E  k: N/ f5 G0 E* N" s2 u; O{
6 e% O, q( U5 r! D( ~3 |* _   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));4 n( q! m+ z) H5 g9 i
   copy_to_user(buf,&DRR_data,len);
, G/ ?4 l2 ^1 C  H   return 0;
# P% h7 ~$ d' V  d3 m}4 y# s3 y' n+ R7 y' ?: V2 X! j$ C
( D3 `5 w+ @1 `  i4 m/ w; `0 y

) q: U6 ~& ]2 Q) q' E" f, Q$ O% o) {5 wstatic struct  file_operations mcbsp_fops=
( \1 R5 M- w1 X3 p- v' o/ P{$ o! ~; j1 d; O! x; S+ w. ~5 r- x
   .owner=THIS_MODULE,+ u" h3 s; Y9 n9 S$ E% w" D, ]
   .open=mcbsp_open,
; t2 s5 L3 x( `" J" U7 k4 Q3 g5 l   .release=mcbsp_release,0 z, V# z4 |, M* Y3 k' y
   .write=mcbsp_write,
' B' b8 N3 I+ Z2 Q0 z  e- u   .read=mcbsp_read,- L/ M$ a( y' c& b% L" ]* a- K
};( H, [9 m, }6 Q9 ~. J3 V2 U  u' ~
static int __init MCBSP_init(void)' o# ?8 i& |+ I
{
3 c4 f! y4 E& {   int ret;
0 u4 t! E" ?- ?, j; e   unsigned  int   PINMUX1_REG_old;
/ r/ r7 p7 o6 v+ V4 W8 [   unsigned  int   PINMUX18_REG_old;
$ q( u. `$ A% Y+ H8 t5 o" B   unsigned  int   PINMUX19_REG_old;
& w8 e( ~5 R3 X   unsigned  int   temp;  
8 ~/ E  |' A' j* }5 {, L   if(MCBSP_MAJOR)- i9 j. {( u+ y9 K& b: [
   {2 {  M9 {$ S: c: y
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);2 O1 w8 k+ y  \; p8 ]
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);3 P. }3 @) ^- c# x. J& s
   }
4 p5 y" z" s$ b; X+ y   else8 S9 [% B0 h4 `3 p/ p. A( ?# S
   {  Z, m4 d) F( a. t
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);- G/ a: k( X) e: c) w3 r0 a
      MCBSP_MAJOR=MAJOR(mcbsp_dev);. I& s4 e4 s8 ]8 q
   }
7 c. x  w% }0 |5 y- q   
( }" U% i  M* b1 _7 W3 o   if(ret<0)( L/ u6 v% {) \
   {
9 Y% U/ P$ `7 Q' ]; t2 A4 H' T      printk(KERN_ERR "register chrdev fail!");
5 [  [- C" H2 ]5 Z) o      return -1;/ o% ^+ V" x! o  x1 c
   }1 I; z5 ^$ x$ p$ P  U: d
   6 n# `1 W3 v) K" W2 p
   mcbsp_cdev=cdev_alloc();3 \, m2 B  m- x5 W
   
, b9 n1 O# [* e" V" C- O   if(mcbsp_cdev!=NULL)
/ Y7 s' s" b2 y/ y  t   {. u% i' Q( m) z& }5 ~' f9 W9 |
      cdev_init(mcbsp_cdev,&mcbsp_fops);
8 m& Z8 ?( V& l5 y. ^      mcbsp_cdev->ops=&mcbsp_fops;
  m) F/ h: }  U      mcbsp_cdev->owner=THIS_MODULE;
: t- V. ]" \$ P: ]% ^6 B      
, ?3 S: N& I- {% s( s- X! h      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))0 T- N- H; ~/ D: P5 e
          printk(KERN_ERR "register cdev fail!");  z1 B6 Q( W/ M6 H
      else
" G7 R% [3 H4 D6 ~0 ]          printk(KERN_ERR "register success!\n");
$ F  [0 n% D, s   }
0 t6 ?" l9 z+ w   else
& _( t: C$ C( [7 Q7 [   {
4 b* D3 D& U) O3 f) u  m7 |      printk(KERN_ERR "register cdev err!");' V6 r/ I; o3 w$ ^1 G3 t
      return -1;: d% Y& s8 O( O1 z) ^
   }8 n# r( N5 m2 B
   + x) `8 X, _  a8 g
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);+ A+ T4 K2 {3 }8 V0 C+ {* o
   if(IS_ERR(mcbsp_class))& L( G1 E) o: K" ]2 T; H& q8 D
   {" V! j7 x5 n' B! w! V
      printk(KERN_ERR "register class err!");0 f6 o. p- X, E$ r2 Q
   return -1;
* y+ r" h, B) U' f6 p+ o/ p' v   }
; u/ A) i$ Q% c4 b; r   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);9 K( I9 ^. t% D6 @# e7 |

. @0 ]! f1 j- [) O. X: z0 r   //PSC5 q- ~) T) r7 Q0 k" Z% O
   //add Enable MCBSP
% }, C3 L! M/ y1 [, P% h. x   //test
, ~* C7 i* z$ I3 V- R  ]   temp = 0x80000003;
, ~6 y/ u; K9 P6 W. t   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
" X/ _( f/ U( J  \0 \   temp = 0x00000003;
; d  i: p0 x' ]+ P2 k+ T   writel(temp, IO_ADDRESS(PTCMD_ADDR));8 j+ d: z4 n2 w) V! x/ i% h
& ?( q" Y# c$ H! {- y
   temp = 0x001FF201;; B& L& I' V" n
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
: P4 u# o0 K5 s' v% d) N& v. e4 J   
. ^  n' r/ A( T" r! O( f; F! {* U   //PINMUX  2 F( b- h& A1 D$ Y
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
7 M% ~$ B# m/ O0 u   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
; t, t/ O% H: I) l   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
* ]3 J. p0 I8 w' \# Z   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);# g! L7 Y7 p$ |  @
   
  P% u9 o9 G: D0 e( l& T( Y   //SLEEP_EN,EPR,L138_SHK1,L138_RC
3 Q5 J/ d/ J$ C5 y% _   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
8 J, a6 j( \" B( x  ~+ _0 S" R- u   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
% T% N; ]$ S; ], P   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);, i; o. I6 D( B
8 G- A1 M/ H0 U: H
   //RESETn,L138_SHK26 v" X. s0 @9 m5 `: _
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  4 g" ^0 ]- }. Y, w& i
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ) |( V' \+ S$ f9 v/ _
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);- I$ t+ A+ v$ _

! V( L& Z8 U0 S* ~" _ 5 e6 h; Y5 D# c) H" C' U8 E- j* k
  //SPCR Register
( M$ z; h( u( x7 V& q; W8 }5 j  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
& l4 {( \# c8 C* F( V, T5 @  temp = 0x03000000;//(DLB=0)1 N$ s( `  Q' Q6 z  q7 v
// temp = 0x03008000;//(DLB=1)
1 C+ [/ c, Q$ o  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset& u/ A, Z% r, Z7 O
  temp = readl(IO_ADDRESS(SPCR_ADDR));( Z: Z0 H8 {' n
  printk("temp=%x\n",temp);& X- }: ^3 H# p# l# f  A+ b
4 m7 N& A$ b/ L& W% s& W
   //PCR Register
+ ^0 a; D1 E) O0 q$ W1 t5 o0 q3 e   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0; ?" N, s& d; y! N4 k$ b2 r
  // temp = 0x00000F0F;
- d! \& P8 V6 x' q8 ?/ z4 ]% {" s, S  temp = 0x00000B0F;, k. m" n$ w2 ?' ~7 T$ r
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 8 G0 p5 z8 s6 W: \
  temp = readl(IO_ADDRESS(PCR_ADDR));* F  W; B: Q% t  L
  printk("temp=%x\n",temp);  
0 o, q* g" Q; c; z   //SRGR Register
1 z/ N6 a$ b6 K- L. G   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==112 ~  E$ z/ {: d
//temp = 0x301F000B;
9 ~" r4 a% \/ H. {   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized : S' x' Q& s) r! y6 d1 H
  temp = readl(IO_ADDRESS(SRGR_ADDR));
) h3 T+ f% V  j3 d! p5 ?  printk("temp=%x\n",temp);
" H  o* ^6 U3 g4 Q$ j; l' q   //RCR
3 |: \& d& v3 a4 L   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,, s# ]: }+ ~, y$ ^5 ^
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-05 {( Z) P% y! a: c- I* ^
   temp = 0x00440040;2 `: A6 k' j; q8 k
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
& Z" J: C3 M4 Y* C' ~   temp = readl(IO_ADDRESS(RCR_ADDR));! l% w: t" p( x4 a- [
   printk("temp=%x\n",temp);
8 V" \! S! }8 ^: e& P$ r% C/ b   //XCR
$ l8 Y6 j+ C- p   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
* Y/ W' j2 j: n" e6 {   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
1 \+ T8 J+ {5 e, Q& U0 C% H   temp = 0x00440040;" k! g- H# r2 w
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   ' u7 j: g1 J. q8 e5 v/ z
   temp = readl(IO_ADDRESS(XCR_ADDR));
1 [2 a& t7 s/ K- K   printk("temp=%x\n",temp);  P; E& p* N5 L% a
  udelay(100);
, m/ `' K( `( [2 K: q; r  //SPCR Register/ t1 l6 T  f. V$ p
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
3 s  `2 n8 P- ~  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
1 k/ }9 a( |0 s, [" C  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled+ Q5 u8 u. N  T7 n& P1 P
  temp = readl(IO_ADDRESS(SPCR_ADDR));6 x9 x. ?* o4 I+ E0 v
  printk("temp=%x\n",temp);" y% _; U1 Q" X
  udelay(100);
( x! Z  K2 U& k- t7 O& w% d5 i
  //set GPIO direction
2 d. q2 W9 |1 ]7 J0 a: F   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
* L) {, z3 M  {/ G2 v* |- L+ L   temp = temp | 0x00000100;//EPR----input# M/ _3 X1 B( b6 F$ l
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
( b+ V5 R1 ?/ C  U) v5 N5 B- Q. B   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); , r" R' x$ i0 z8 V' y3 g0 d

& A, J. U5 `' C/ Q: r   return 0;: _/ A( Z+ |) |- f% G1 }
}' a6 J/ W$ ]9 v+ ]3 w- l' p
static void __exit MCBSP_exit(void)1 {0 Z0 Q% M  M4 |$ t7 P( }6 ]2 j
{
" W9 p6 i% ?6 e% u  F   printk("mcbsp chrdev exit!\n");% O2 v' B. S) w4 G- K3 r4 @3 u2 x
   cdev_del(mcbsp_cdev);
# m3 \5 B, \; d9 N/ G   unregister_chrdev_region(mcbsp_dev,count);/ f0 r. a& M5 D/ Z. Q$ U! i  G0 K
   device_destroy(mcbsp_class,mcbsp_dev);8 R, ~, z# c$ I! a6 z. w& ]1 a9 v
   class_destroy(mcbsp_class);) x) Q) x* b8 a  Q% B& O
}
4 n! r/ j8 f2 ]( R! E* q% }" rmodule_init(MCBSP_init);' V4 _, g8 ?  Q
module_exit(MCBSP_exit);; U$ [; s, y# M& j- Q+ X6 `
6 w- Z4 X: h; z* g
MODULE_LICENSE("GPL");
+ E9 m" l: B* I0 m. b
8 V: i) b- r/ U我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
0 q) z& O. a: k8 X我的应用层的测试程序如下
0 X7 j  m2 A1 i#include <stdio.h>
) D* t. \& ~' l1 ]* G#include <string.h>5 S& \6 D6 Z# I# N3 \
#include <fcntl.h>
, x: @6 T: b- G: M#include <unistd.h>+ }7 l/ `9 B+ v
#include <signal.h>
/ u) Z9 p* z; _0 o. }5 }3 U#include <pthread.h>       //线程
$ s3 p2 G1 D% ^#include <stdlib.h>
% O8 M# z  K0 \' ~5 a7 V4 M#include <pcap.h>          //捕获网口数据
) E1 r; p6 B1 \/ F#include <semaphore.h>     //信号" w2 J+ R9 P5 K& a7 X: u
#include <sys/types.h>     //消息对列
/ ^6 E3 z: R8 L* k1 ^! j( B#include <sys/ipc.h>       //消息队列" G3 t5 \# S' ?) ~; X+ b1 ^8 {
#include <sys/msg.h>       //消息队列' `0 \/ U' P3 y3 V( A, Q
#include <sys/select.h>
. V9 _) N: t. A9 c/ `#include <sys/syscall.h>
- l9 P, \. Y$ w" ^8 q2 E' j) g, t#include <sys/stat.h>
  K. c4 ^3 f" y+ l, f) q! I* S#include <sys/mman.h>
6 j: V. T2 H+ }  q* Z#define msleep(x) usleep(1000*x)3 v! \/ K3 a/ X% j% m# v* H
& l  g9 I- Q$ }
int main()6 R8 |4 @  C3 U) [
{
, S4 B7 W! W, V4 q5 N, ]; V0 m    //MCBSP,ARM与AMBE2000交互设备5 f" ]/ }5 e; i% u$ b+ y
int fd;/ C& E+ y' T% W# Z& }7 P% S  i
unsigned short data_write = 0x5555;( O$ Q3 p; }' m' p1 ^- I9 Y
unsigned short data_read = 0x00;" b, q* @$ L# g, ^1 l
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);0 N% ?6 B/ c! i1 A
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ `9 m0 X7 }/ X  ^! z   
2 Q1 x; {% ^7 q9 U5 u0 l  if(fd < 0)
1 C% E- l7 \. i1 J6 ?, B  {
) O( Z& B- Q  k+ n; V' Z7 c     perror("open failed\n");
5 U# ?9 U: G8 h5 d2 ]     return -1;
% B+ q2 z- ?6 N" S5 Y% [  }' T0 b( Q5 W: J' `$ ^# j. M8 c! ~
  5 x( j- y, T0 ?: W1 J' i7 Z
  while(1)
' |  @5 k  s! G' b  o8 o  {
6 R4 l+ C1 X, T/ ]4 V# L   2 e7 U* @, g. l# o$ [
   //AMBE2000每次读写是24个字为一帧
3 N/ \8 }5 j) \" |% w! z% n   //写数据时将数据在底层存储起来,等到中断的时候再发送9 F9 p* C2 m% _  I" k- C2 H3 c" D
   //AMBE2000输入数据是以0x13EC开头的
# P, {$ c. ]+ j2 A& P+ y. N( R   write(fd,&data_write,sizeof(unsigned short));; g- J& a0 R8 q0 }- w. R+ x3 G! M& W9 h4 M
   
! N4 `7 o9 _# d% E! M   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  6 h+ k- C$ |4 Q' D
   read(fd,&data_read,sizeof(unsigned short));" F5 L2 x  y+ j& \: [! e) a
   8 y4 r5 y3 ~$ @+ \& w, i4 `
   if(data_read == 0x13Ec)
+ j0 k" w3 o' {& i0 m# N! X, E   {
; V, s) ~, u+ r! K5 A   * n. G' \& T4 u! z& Z
    printf("data_read = %x\n",data_read);
4 x5 z8 r8 W3 h+ p/ [& i  Z   }" ]3 c6 A  P/ s+ Y& Q
   % {+ r: q" R  X9 i
   msleep(10);- w/ R/ B0 t4 ~1 X! l! [: X* k. i
  , {3 O: A7 }! u5 P. i
  /*2 F% }. |  s$ O
   ioctl(fd,1);   * W7 T4 z9 U6 l
sleep(1);
+ v! Q# }- @# u8 o: { ioctl(fd,0);/ y# s3 _3 o* m; u" ~% i4 c
sleep(1);9 e" K+ I2 y/ p  \6 A5 d; X2 P$ c& m) r
*/ 2 s' n5 b5 m9 n/ K" Y0 Y& g
  }   
! E- R) D& Z0 o! J. h return 0;
" i2 p; ~" T$ K$ U " E7 `6 k6 t- k; e: ]
}
4 x" g& v2 q/ p
2 H+ n7 w' P  @3 H! \  i8 [9 g多谢各位指教,谢谢! 急9 H' S. A( h- K9 Y+ M
# [, K0 b+ k% Q
2 w4 ]3 `6 S& v! C0 b. N" O6 X0 {
3 P: b  V' F! w+ S6 H- S, y
& f+ i1 _1 ^5 m1 E4 S

+ X9 d! y7 A6 ^" x$ C' x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 10:33 , Processed in 0.041441 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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