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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 3 {; Z8 f" N* F  \
/*" w' P  o; a4 A  e- _* M* P3 O
* Copyright (C) 2009 Texas Instruments Inc
1 l# f& K" g, h0 t) W. ` *
. C. [# U8 p8 l3 w * This program is free software; you can redistribute it and/or modify# h! E/ N! t) m
* it under the terms of the GNU General Public License as published by+ O# e' ~+ R! o% p1 Y* y" F: }
* the Free Software Foundation; either version 2 of the License, or
" d" d0 \  w% O * (at your option)any later version.( x8 [1 A* g, B- W1 x( Q% N$ ^/ R
*
) I9 \5 v5 D( w' S6 W6 ?+ E& c * This program is distributed in the hope that it will be useful,7 ?; m' G/ ^% ?+ H4 A7 h
* but WITHOUT ANY WARRANTY; without even the implied warranty of4 B3 r/ A0 H, Y. H
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 j$ o# i6 J  y" L* G4 U' I) s5 |
* GNU General Public License for more details.
2 W) P: I8 D7 B *
5 F! S( u( e6 Z * You should have received a copy of the GNU General Public License6 H# Z/ w( D' Z
* along with this program; if not, write to the Free Software8 n5 F4 h9 C* A: v3 Q0 D2 A6 A
* Foundati8 }( k* p6 x5 @+ ]
*/  Y* e- I; Y1 e( p6 R
#include <linux/module.h>
, b  [; T$ d& q# @#include <linux/init.h>
/ ]3 ^7 F1 f" e#include <linux/errno.h>
0 b& Y) L) L6 @* k#include <linux/types.h>' J4 Y# F: w5 H4 c; T! M
#include <linux/interrupt.h>' e- ?  D2 o6 n% p
#include <linux/io.h>
+ J$ @* C7 k1 I/ e+ E" l' ?#include <linux/sysctl.h>
2 ?: j9 |5 t, ]% P/ N#include <linux/mm.h>( _1 U" [2 N8 x3 l  x
#include <linux/delay.h>
/ g6 q% q' |1 y#include<linux/kernel.h>
. t+ W% X$ \1 Y5 S/ N( p% _#include<linux/fs.h>( F  @& l, H: d/ W/ H" m; O
#include<linux/ioctl.h>
- A8 J' x4 }  w. }#include<linux/cdev.h>
9 F' p7 B4 h' T+ U$ r0 w, K7 d#include<linux/kdev_t.h>0 r0 O& W( a) `' T
#include<linux/gpio.h>: ~$ [$ v" q4 |* n8 \
#include <mach/hardware.h>, Z) M: ^% N0 @! y0 {
#include <mach/irqs.h>, f% d7 V% i* o9 M) g

7 c9 f' B7 q) ~3 f#include <asm/mach-types.h>, _  A# P" S5 y% d; P3 d+ m& K
#include <asm/mach/arch.h>
, P& o9 r; Y6 L) r7 _- a1 n& J#include <mach/da8xx.h>
  R. \9 G$ G. |) V$ j#define  SYSCFG_BASE   0x01c14000; N) [7 u; K' t3 u1 s* L0 l
#define  PINMUX1_OFFSET   0x124
* V. U! u. W+ ^) V8 M. A  U#define  PINMUX18_OFFSET  0x168
9 d( y1 c# [' V9 s* _% P6 c% A6 k) z#define  PINMUX19_OFFSET  0x16c
0 X7 w. U* K9 D- P#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR& Y+ Z0 a& o7 T
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
: Z& I1 p% a' @/ J$ @- ~6 k; u#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR4 S  G* a8 Z. s: p2 L/ y
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR: b! ~9 @9 J. ?
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
! r, i7 o# j" r, i) l" t& ^2 X                              r! i( [" q" g& s
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR1 t0 l$ U1 }6 q( R2 H: G
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR! S: L; Z. p# f7 D0 t7 Z* u
//PSC! A# h# L& T- f
#define  PTCMD_ADDR   0x01E27120  
+ W# q+ s  z/ g3 l4 x#define  MDCTL15_ADDR 0x01E27A3C# W: m$ i+ m& d1 C3 t
#define  PDCTL1_ADDR  0x01E27304( X. w& z6 g4 Z2 C8 P3 z0 I6 q
//GPIO8 direction9 a2 D$ D, _! _/ ~3 O. C! w
#define GPIO8_DIRECT  0x01E260B0' ^" D/ W8 u6 k' |$ g. h
#define GPIO8_OUT     0x01E260B4
1 e7 E3 h6 ~$ o( `" n3 G#define GPIO8_IN     0x01E260C0
% |, G! ^' P3 d: u7 B" B' p" N( w# x9 ?& V
//#define MCBSP1_RINT    99              
6 B1 }/ @$ {& x. ?; \2 `//#define MCBSP1_XINT    100  
5 w, p( q" D% `5 ^: ]static int MCBSP_MAJOR=239;5 _" R* F) N1 i' ^2 V% d% r
static int MCBSP_MINOR=0;
1 ?8 `6 l. N# J5 ]+ rstatic int count =1;
0 e+ ^/ `. O6 i- b1 S  X" s3 J$ N1 F( u  S' v7 B$ z
#define MCBSP_NAME  "MCBSP-device"
) K9 O" _$ v) ]: j9 o3 i2 E! V  G' ]( C$ Y
static struct cdev *mcbsp_cdev;
8 A1 l) X6 I: w6 Nstatic struct class *mcbsp_class;
7 z# w0 u3 ~- J& Y9 ?  c9 {* Ustatic dev_t mcbsp_dev;
, {! i8 f+ |6 X9 Ounsigned int DRR_data;
( `: g5 b1 J/ ?  a2 m5 E9 Yunsigned int DXR_data;2 _8 \. A9 E0 U' }
static int mcbsp_open(struct inode *inode,struct file *file)
) ]1 @; U# t2 X! w8 E{7 n% a; N- G' }
   - E4 Q' B6 \' O3 m' L0 I; U
   //interrupt enable,initialized
6 U$ s! N8 y% v6 @2 b   unsigned int temp;
$ \& L, P+ \+ p; p. h$ M   //SLEEP_EN(GPIO8[10])---05 J: S' M( g' U" E
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
. S7 y* D0 m; K: G   temp=temp&(~0x00000400);
, S8 q' J* R0 o) q0 n4 r( m( t   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]" l. r4 j$ Z7 n) a! s# F! m+ J! J
  //RESETn(GPIO8[8])----0----1! f6 v! y% c/ h* p* g
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
# G: \) M, ?9 G7 t& o; E" ?1 o   temp=temp&(~0x00000100);
: U5 w+ K% U7 p* r5 @7 J! c* x5 q! N2 B; G   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
6 y0 K. L: q% _- Z! z  [' W   udelay(100);
9 ?5 D! j6 ]6 H  F) `   temp=temp| 0x00000100;
  W5 d3 \& a* q" X   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1, f3 n  n- Z" j
   udelay(100);
7 q1 }$ u+ c3 t" b' r8 ~$ t   printk("open success!\n");
" |. z, F/ Z2 i* V- J   return 0;
5 a* x7 q/ U0 u}
: Z+ M, e7 X/ |9 g; P4 Q
- u# O( E5 h, l4 ^! W5 jstatic int mcbsp_release(struct inode *inode,struct file *file)
# w7 ^. V6 O) M  h6 M{
+ u" J4 M  C) b- i   printk("release success!\n");4 ], G( z$ ^/ c9 U1 M
   return 0;. Y! V% l$ b( |' |; b/ A
}" j7 p& g; h1 L8 _

  s9 @9 _& f* L) a+ i$ Wstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)# c* d2 I6 L( x% H. ?# j, g% T* Q
{
9 Q( X% E& k* I    copy_from_user(&DXR_data,buf,len);
- c' M9 w9 p. M" o- \    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       7 S5 ~' X/ n% t; g# D' ~
    return 0;) P! [" e1 _% o

0 L7 q4 a* X  X, {; t1 ?}/ K/ ?0 D6 N' `3 ]

- z$ q5 ~7 ]  u* j1 d: Q- q: hstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
% u2 j% q" O3 P) d  Z{
. {9 [9 v4 @$ \   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));- L% M" k2 w: Y: C1 }7 ~
   copy_to_user(buf,&DRR_data,len); - p6 ~+ L& o# R0 R5 t
   return 0;% D' l7 X! A7 F, f5 k  ^
}
8 s7 D" ?1 b, }/ N0 d$ H- i
8 d% P! F2 B& h( a: d4 G9 ]. O
9 i. d( k* z( \; }static struct  file_operations mcbsp_fops=1 q7 O' k* V* w9 A/ _  w
{% T- d8 o! `! a9 m( ?; l0 ?
   .owner=THIS_MODULE,8 W) s4 q( i  i- E9 D$ r: u  G
   .open=mcbsp_open,$ e! {5 B. P& }0 T
   .release=mcbsp_release,6 L2 A1 q$ ]0 X' I& _
   .write=mcbsp_write,
( h7 M- T% u* D   .read=mcbsp_read,
/ ]5 I$ f$ w; a4 ?9 M};, |  r1 m/ z' U- i
static int __init MCBSP_init(void)/ I7 Q& A* ~4 L- z; @
{7 S: m, A: j3 b0 H
   int ret;
# {/ }1 b1 p6 H3 o   unsigned  int   PINMUX1_REG_old;
* p9 K3 r( r  M  y   unsigned  int   PINMUX18_REG_old;+ \& v. G: K) }
   unsigned  int   PINMUX19_REG_old;; d& i7 E' M  a4 Q' v0 E
   unsigned  int   temp;  8 V) _# _$ L/ Z3 ?  U1 d: ?
   if(MCBSP_MAJOR)
" [' M) p2 S. m' {  r   {
2 f, t" f( Z* j5 ?. }; A3 o      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);# w8 C/ {4 T% \. }
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);8 k2 O0 ]7 T) A" {; F
   }$ U: U( v+ ?9 f& V* i
   else) h: R; n9 m  o
   {/ W1 F$ E- y' W% p' s; Z- k
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
' H( j5 q' x  P      MCBSP_MAJOR=MAJOR(mcbsp_dev);
. C' j; v5 I1 }: G8 ^+ G" t   }
2 b) R8 ?( K- X; u   9 v# O% G" `, C0 \  n7 M
   if(ret<0)
2 Q0 P8 F" w% {4 ~2 X$ b& k   {
; Y- M: L( Y' Z6 g2 S" n2 \# m7 y. u      printk(KERN_ERR "register chrdev fail!");
2 H( b8 w# B2 J5 F9 R6 b0 f      return -1;2 ^& y8 M; T4 y3 @+ J0 f$ X
   }. @7 Z" s0 f$ Q9 b3 B: V2 i
   
* V3 ^8 T& T1 l   mcbsp_cdev=cdev_alloc();; U  s9 ?5 ~8 r- x( \
   # a# F) F# F- M6 h5 P* Q3 s6 O
   if(mcbsp_cdev!=NULL)' O6 n" h' R. J* v: l. s
   {  w5 J9 f( x& `/ E
      cdev_init(mcbsp_cdev,&mcbsp_fops);3 G- a/ u( f' {& ^- @2 n
      mcbsp_cdev->ops=&mcbsp_fops;
* d; g% Y5 L! h3 b8 e1 i      mcbsp_cdev->owner=THIS_MODULE;+ I" P8 L: c, Q7 q" k
      7 {) }9 `3 f: r; C8 B5 q
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
0 [. `, s0 X( j/ I: l9 z! j7 \          printk(KERN_ERR "register cdev fail!");
5 ]( o4 X( N8 b8 A, z  [6 N5 H, L' {      else- B; v; T7 F9 ~/ F0 ?- n* x
          printk(KERN_ERR "register success!\n");
1 Z( A. w+ h6 {   }
" h% L$ O4 k3 _   else1 Q. Q- ?4 u# e1 F' e
   {
& g+ ?3 [% s1 ?+ L2 g      printk(KERN_ERR "register cdev err!");2 v' K( J( `  t& _0 M8 {8 k1 y
      return -1;
. l" c: @8 _! m/ H* V$ u   }2 h" x" v( \& P" g' X7 n
   2 I$ E* w0 f. g& m2 A; y' m* O
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);( U7 q. o2 W7 c! r0 @
   if(IS_ERR(mcbsp_class))
& o' u8 f" Y, J8 C   {
* h! c+ |/ B8 C7 y5 I      printk(KERN_ERR "register class err!");; |& I% q# s) Y' `; r
   return -1;
& E# M0 {$ J2 d$ r( R. J   }
+ ^4 l6 T1 E( A: F, X   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);8 y/ V0 A$ T, a8 N+ s& p
' L7 J0 f# v0 l/ c5 i& I2 n4 l
   //PSC3 t( ?0 i  o8 {/ E
   //add Enable MCBSP
1 q& T( \; e- e. C$ B   //test
# ~9 P; o3 N/ a   temp = 0x80000003;/ S$ V& s7 _/ P
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
0 @; ?# L( V# i: Y4 T   temp = 0x00000003;
- w" W% ~  I/ u3 }8 u2 h5 |$ b   writel(temp, IO_ADDRESS(PTCMD_ADDR));8 O" y4 x: x. F$ E' a
" ?! E9 R% }4 o% Y! J2 n- T0 l
   temp = 0x001FF201;/ D; Y" C6 b3 y9 ^
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));" v% s9 w# Z! G9 C) d) @* m
   
4 u0 V- }. J# c4 S8 U* c   //PINMUX  
% P( ?8 ~" w+ W' f& {9 n" C   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
; O5 L. b. r: [4 \$ }   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  1 O! {) ]) a$ i4 K
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
1 h( z" w6 q- X   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
* w1 V  L! h% J6 u: M  x* A% c   
; y' U1 j5 G6 F" e. B/ z) e   //SLEEP_EN,EPR,L138_SHK1,L138_RC9 P5 p) r% c: U! ^
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
; T( Z3 Z! b, l   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
/ J7 X( m+ N" ]# G   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);3 B5 z: z( {5 W- n

7 a3 [& _+ n+ e4 G+ L: d) n   //RESETn,L138_SHK2
+ l1 R  g$ p3 T8 e5 U6 z2 `( g" B3 y   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  # P% y$ J+ _9 D1 d" o
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
' x3 z8 G1 e6 _# b3 F! U" g   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);. h6 ?, x1 e( S2 M7 o, {
& s8 y" q$ |! Y( q. ~
7 U4 e5 M5 _8 Y
  //SPCR Register
. J1 b! o9 |/ W/ J$ t, U  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
7 L2 W; W& J3 W0 u+ d  temp = 0x03000000;//(DLB=0)( k& U- S1 |7 {& u$ x7 Y
// temp = 0x03008000;//(DLB=1)$ N9 D5 g% V' e4 g; ^
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
2 x# \7 ^5 v1 G. z3 X$ F; l8 L9 W  temp = readl(IO_ADDRESS(SPCR_ADDR));6 k8 e* H4 T% T9 V" l3 l
  printk("temp=%x\n",temp);
% C% ~3 ~0 o* P2 c5 o8 J! | ! \- g6 ~5 m2 g- U6 g# H) h
   //PCR Register
6 `' G6 X# S; e" I& F   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0" G7 e  |) _$ _9 z, }1 k) J
  // temp = 0x00000F0F;) K% i/ ?5 f8 S0 t: }2 q" g1 k
  temp = 0x00000B0F;" \0 ~6 w9 a. w/ D
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
' H, L6 M- L$ L, y  temp = readl(IO_ADDRESS(PCR_ADDR));4 s# W* K( o7 C$ T
  printk("temp=%x\n",temp);  
  a% u; B+ K8 R/ g2 C: J! r   //SRGR Register3 b) t+ F. V/ i0 H* R$ \& l
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==115 Q, ~2 E6 o. w; \# K
//temp = 0x301F000B;7 o* R3 p1 b  ]1 @# N
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
! Y: K  V5 n3 ?; U. ~/ a: W7 U  temp = readl(IO_ADDRESS(SRGR_ADDR));
& L4 W1 ~1 d2 G8 T/ T  printk("temp=%x\n",temp);
5 B, b1 O8 w% C- D9 v3 f4 r   //RCR
2 f4 ~8 t5 `$ m7 I3 X   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
6 c" ]* K# u, n   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-01 ]- x# C  m  O1 o( S
   temp = 0x00440040;+ H/ j4 `" L. s
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   3 {. O' [# E# t& F) ^4 c
   temp = readl(IO_ADDRESS(RCR_ADDR));
. C; G. }% l6 D; k- w# Z   printk("temp=%x\n",temp);
) U* M" V, h* W, j   //XCR
7 x/ _) o$ S! [, a8 j0 z. d   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1. D+ b+ [+ ~$ g. h# _0 s- C+ a
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0/ O6 Z: I2 S8 `- o# Y
   temp = 0x00440040;; X8 x- v8 \0 Y* B" @) h
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
% ~5 o( n4 Z5 m  X* ]9 B5 }+ c$ a   temp = readl(IO_ADDRESS(XCR_ADDR));( }' T# f7 X8 B1 {& B: g
   printk("temp=%x\n",temp);1 b9 J2 j+ b# k
  udelay(100);
1 ?; i: W" `6 w2 r5 X' H' t/ Q9 I  //SPCR Register
0 O+ ?# ?2 l$ p3 R; Q2 w  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1/ a6 ]4 L% V  \0 V0 I3 N, w& I
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
, k( O$ f; r0 F2 H( _; d, m  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
8 J- }( _/ B% ?" [  temp = readl(IO_ADDRESS(SPCR_ADDR));* ^8 t; t0 K" Y) n1 r
  printk("temp=%x\n",temp);
2 u# @8 r# D& d) W! |  A5 ]  udelay(100);
; i( O( e9 T4 F& w
/ G. `- j3 a5 _' N5 Z+ Y. `% @  //set GPIO direction
& i- b. k8 F. s3 z* u8 r# [: c   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));7 D3 l8 ]7 b' `) a( H4 j3 j
   temp = temp | 0x00000100;//EPR----input
' C" I, v6 |% A, r' n: s2 V0 ?7 i   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output$ y8 W7 Y- g" W# r
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); , v* O* q8 i  P. R
9 ?" y3 w5 c2 J& x5 S9 I% x- V
   return 0;
* W* Z: o; \( ?& p3 ]* x  r/ A}0 P9 R5 D+ @5 Q: v4 N
static void __exit MCBSP_exit(void)3 S" }4 z3 G4 Y" H* Y  ~5 J" Z
{3 B4 j' @: p4 v
   printk("mcbsp chrdev exit!\n");
" ^# R5 f# ^9 r+ @( B2 M   cdev_del(mcbsp_cdev);
- P2 R+ E, r5 H5 [1 d   unregister_chrdev_region(mcbsp_dev,count);5 n! ?9 A/ Z# |3 Z: {' k
   device_destroy(mcbsp_class,mcbsp_dev);
& w, `5 x$ m# ?$ {: q- V   class_destroy(mcbsp_class);
, C$ ?& c' |! C' g$ A) n1 B  u}
: A. m. [) @; c& Z  v1 S. @module_init(MCBSP_init);
" i6 S/ ?6 I; V7 e8 r" q- Kmodule_exit(MCBSP_exit);4 ~2 P5 _' |- I  n
5 N, @$ R* z0 Q9 U% L
MODULE_LICENSE("GPL");! J- C: @! z" G+ H& y

  L* S1 |* N5 _+ F7 R- ?& k我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
" E/ y" p5 ^$ R* D5 p' i/ P) ~. l1 u* V我的应用层的测试程序如下
3 q$ _/ b3 }+ d; |7 v5 ]+ \$ J, z#include <stdio.h>
( T, u: d) J. X#include <string.h>
1 a# r* c* x: {. v#include <fcntl.h>
6 w1 k) l! ]& E/ k3 }#include <unistd.h>) `9 s1 I- q6 Y
#include <signal.h>
% A# d; ^2 v9 P( i% Z#include <pthread.h>       //线程# L4 y& ~) t+ Z; Q* ]  W
#include <stdlib.h>
( z3 p$ a% @3 G# d% [# f#include <pcap.h>          //捕获网口数据" Y1 W* n- c4 i5 s' ~8 z" O1 s
#include <semaphore.h>     //信号
* u7 N% `* _6 b4 g$ Q% T" U7 {#include <sys/types.h>     //消息对列
% c% U7 f3 L2 z, V. J% D#include <sys/ipc.h>       //消息队列' b  `8 C8 X6 Q9 b7 J0 m% h
#include <sys/msg.h>       //消息队列
6 m5 l' _3 h" J. Z) \& W% Y1 B4 h#include <sys/select.h>
1 n. _) A6 f( w) i- w- o' P1 b#include <sys/syscall.h>+ ?0 n8 e3 b, b- X4 Y9 d( i
#include <sys/stat.h>( M2 H# d  v( f/ d8 P- Q) o# c
#include <sys/mman.h>3 |0 `- {( a: H# x' {
#define msleep(x) usleep(1000*x)
4 ?6 f0 X1 C  \3 M% l- u- _4 `7 Z' C3 u
int main()! _0 g2 V. n) G  X  Z/ W
{ ' t3 m* m- z+ f/ ?
    //MCBSP,ARM与AMBE2000交互设备8 }: w" S! I6 n  y
int fd;
: j. N; k1 O. n7 Q: o4 B# ?& p unsigned short data_write = 0x5555;4 n  ]' P$ v3 u. c) u8 c4 s9 S
unsigned short data_read = 0x00;, i$ _7 u8 x" o/ [  a
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);7 B9 J5 a  A+ E% O& e% `0 C& I. M7 d
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);. i' J; `1 J7 v3 `# |
   
- P8 L7 V" [7 J3 \9 T8 P  if(fd < 0)
7 P. d0 `9 x' [& I* B7 f2 H3 P9 W  {
. v% v# n3 K! N4 q! C" m     perror("open failed\n");! W) T7 i( E# }
     return -1;; Y2 h- a6 k  Q$ x; K( ]
  }0 b; {; X, l/ @3 a9 h
  ; u: w: |3 e, f2 o2 Q1 L* Y$ q& |
  while(1)  C* q2 ^3 x& w9 w. [  q
  {/ B* P0 ~/ j+ Q7 Y* v
   
# e) M9 I' p) G. V1 e* e3 j% y) b, z0 a   //AMBE2000每次读写是24个字为一帧
1 M2 B8 o; a4 F9 H6 p2 e0 p9 U   //写数据时将数据在底层存储起来,等到中断的时候再发送1 |1 p+ S# w4 U& I$ v
   //AMBE2000输入数据是以0x13EC开头的" z3 I. v/ z8 D
   write(fd,&data_write,sizeof(unsigned short));5 M: a. l( J+ B0 ^2 ~1 O) a( d
   ( o# m" V2 B: d  R
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  * i  _- R' J: F$ L9 Q, h& V
   read(fd,&data_read,sizeof(unsigned short));3 ?3 X/ d9 e9 R/ Z7 M
   & d7 v$ A0 z  `2 [. A( x
   if(data_read == 0x13Ec)
1 h& d8 O+ T! y' i/ s( {! y   {
" _- l) w1 E3 E' ?. f: R   
2 K! r2 T& \, {    printf("data_read = %x\n",data_read);' @5 F) \) G8 B: t6 @4 G) j+ V
   }
; C& \/ O) ^6 N! N5 d   * y& g+ S+ {9 N# I4 J+ a) m
   msleep(10);# u$ N9 {6 F4 ]" C
  
0 h( _& Q& ], K! m  /*0 |* Y9 U5 j/ `% ~
   ioctl(fd,1);   
3 Y; U# e9 e* l4 P5 S& z sleep(1);  Z, [/ g5 K( t
ioctl(fd,0);
" `: n! c1 a) y9 Q' q+ ` sleep(1);+ X5 q& n7 n* i2 K
*/
1 c+ i7 G1 |' G& e6 I  }   7 n) e  C1 j7 Q: u3 v' G" a
return 0;
. Q3 J2 q5 n  r* R 3 l- p- H/ \% z; w5 s
}6 E; _' {7 M3 d3 S

# t3 p6 A, X$ V  O" }1 q1 }多谢各位指教,谢谢! 急
% q% P) g5 k1 \9 s
  d* M" @1 X" G( H  L( F' F  j" y+ T0 z9 f, x

' l8 q( b9 S9 O) ^- w
2 Y7 L9 C. t0 Z1 _% X* F
0 A/ |; W( s7 g/ v; I4 f7 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 02:03 , Processed in 0.043612 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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