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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: # p& |  Y& {" |; \' ?( }) Q
/*
5 B( {3 b* `9 d$ l0 C4 r * Copyright (C) 2009 Texas Instruments Inc" N( y3 P) R/ ]: e
*
' ~& c9 @. C- I8 c; l$ l( v * This program is free software; you can redistribute it and/or modify
0 N" P* z3 b3 y7 y1 P/ _* Y * it under the terms of the GNU General Public License as published by
# j) s- J  D# S * the Free Software Foundation; either version 2 of the License, or
# h) ~5 y# M! I * (at your option)any later version.$ _# L; a2 |1 @$ Q
*. v  r+ ]" C: Y0 m- L" V4 z. `" M
* This program is distributed in the hope that it will be useful," Y9 c% k+ u+ n$ n+ B& l! I; M6 K
* but WITHOUT ANY WARRANTY; without even the implied warranty of) B! q4 d3 `* a# \$ A# }
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) B( f8 q3 H, f  C0 g * GNU General Public License for more details.
8 l  ]  o0 x* q9 J *
, [1 |2 E% Y: m5 t. h% k( f * You should have received a copy of the GNU General Public License
* W, d' x% U( U" |- A * along with this program; if not, write to the Free Software
  M+ i) ]' O, p9 m * Foundati& }2 N& F6 n5 ^) a+ l6 D
*/2 F! X/ \* E$ x& P
#include <linux/module.h>% k' S; i7 H6 M+ _* C$ e
#include <linux/init.h>6 q7 i# Y. {, s" W6 r# w6 \
#include <linux/errno.h>/ v6 b8 N7 B+ [8 X" @9 I$ H* A9 f
#include <linux/types.h># q# h6 U3 w7 W- d, ?) d& G
#include <linux/interrupt.h>0 X+ d& q. s$ W) x, ^
#include <linux/io.h>
3 I9 ?) _$ m: k#include <linux/sysctl.h>0 |/ Z  w; {6 }1 i+ u) B" X
#include <linux/mm.h>
8 |2 u! n1 d( S) Y% T+ ]#include <linux/delay.h>, g: d% e: T% g4 @7 R
#include<linux/kernel.h>& h% z2 H2 G9 j! l/ Q5 W* p, C
#include<linux/fs.h>4 x1 m0 A) V3 @' G8 J! O$ D
#include<linux/ioctl.h>* k0 _! p. a) d: h) ]
#include<linux/cdev.h>& \1 c% y8 @/ x9 i
#include<linux/kdev_t.h>; n2 D& ^( X) }  d
#include<linux/gpio.h>/ |$ l2 I5 x1 l, j$ j5 v/ l5 ^( o8 r
#include <mach/hardware.h>
7 T& l0 @6 m# L- a#include <mach/irqs.h>
" M4 U4 f+ |9 ^5 z: e, G- i* b8 y8 j* `. {  V
#include <asm/mach-types.h>" g2 b3 q0 @: X; {
#include <asm/mach/arch.h>9 V: S+ M) T* N
#include <mach/da8xx.h>/ X6 p' J1 w# t
#define  SYSCFG_BASE   0x01c14000
" b6 W1 ~4 ^8 \* P, v, g# b. m6 {* A#define  PINMUX1_OFFSET   0x124
. Y3 k8 |; d) p4 g8 _#define  PINMUX18_OFFSET  0x168   @, r+ _& E& N& E& A" V5 h
#define  PINMUX19_OFFSET  0x16c  W' w' e: N8 j4 W1 U8 `; c9 Q
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR4 @/ Q$ L/ F" y9 E
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR! {3 }2 q# E1 ]: i
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR& A( ^5 F/ K. i3 ~* b( O% L
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR) V4 i8 ]. S& n) W, w
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
: ]0 H  Y) T, _0 k8 |' d( l' \& N                            " g  O# i6 i0 Y' s$ Q
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR! O: u# H" G+ Q3 |. B
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
( c& m0 @7 \/ M5 x. u//PSC
5 H  J1 I+ s' M#define  PTCMD_ADDR   0x01E27120    v" K, a$ A; P# b3 l2 K' M
#define  MDCTL15_ADDR 0x01E27A3C
& j1 \. `$ R4 C# n#define  PDCTL1_ADDR  0x01E27304
) A! T: q- R3 |//GPIO8 direction
  U, P+ @, |$ l; W; ?#define GPIO8_DIRECT  0x01E260B0
" D: C4 g: V5 l) `3 X# Z; T8 ~#define GPIO8_OUT     0x01E260B4- f- [/ v3 F) h3 [/ c
#define GPIO8_IN     0x01E260C0
3 B" `& {' \4 o& J% w8 V2 ]
& }" u0 w5 B* e, n//#define MCBSP1_RINT    99              
4 q9 R$ a$ s0 ?) T$ G//#define MCBSP1_XINT    100  . y8 z2 Q1 j- K7 N: y2 V
static int MCBSP_MAJOR=239;
  h# O9 E$ Z1 F: q" [# o  I  Pstatic int MCBSP_MINOR=0;# ~% t$ T, m' D& Y( C" W- H" U/ `/ _
static int count =1;
: L5 I5 N" f! Y7 N7 s% F9 a* d6 l3 I
#define MCBSP_NAME  "MCBSP-device"
6 s" W7 s, @9 _6 a! n7 s
) D* |4 i- u- t6 G, vstatic struct cdev *mcbsp_cdev;( m* K8 l. L" p4 g# K! n
static struct class *mcbsp_class;
% I* {' t2 f3 Zstatic dev_t mcbsp_dev;% [# M0 t3 y) v4 D, _0 J4 x0 D; E
unsigned int DRR_data;
0 h7 N: F% ^! ~# `: iunsigned int DXR_data;
& y: X6 w9 k. d. Q1 n3 E3 ustatic int mcbsp_open(struct inode *inode,struct file *file)
, {! y8 d* }4 \{
9 {% z+ N1 h8 `+ S% o: ?% l( D! [   ! v8 O+ T, b5 p5 d. s; c
   //interrupt enable,initialized7 h7 k! y4 a1 M5 c) _
   unsigned int temp;
$ \% h) E7 ^; k; i   //SLEEP_EN(GPIO8[10])---0/ ^$ Z, P6 i8 k. o
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
1 d  i* x% w9 m8 h   temp=temp&(~0x00000400);
4 u1 [- m5 A. q7 w   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]# h- {* k* _: I: X7 x
  //RESETn(GPIO8[8])----0----1/ O+ w+ c9 u3 H1 s
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
6 q4 K$ I; x! s" f1 Y" _% `! ]   temp=temp&(~0x00000100);
( N; t2 S1 ?9 T. t   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0. C# N/ V1 x- k
   udelay(100);6 i' V, f9 g) Z: {6 L
   temp=temp| 0x00000100;
1 _; d8 i" c5 ]" D   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
! D8 {) n0 J3 T, l, O; H7 h! A   udelay(100);
1 D- y' ^9 X0 l: m   printk("open success!\n");0 d( i; {" Z" M9 q: h, v
   return 0;
, a( H, T3 J: h}* \* N7 O% K0 S
" X! j% m4 O: e: g: Q3 I
static int mcbsp_release(struct inode *inode,struct file *file)
/ P8 {/ K; V, {2 a. s& H{$ S5 e: |: ]2 }  M. I* {* r' k
   printk("release success!\n");8 a+ L( m# v0 I$ b" |) m! ~% Z. i
   return 0;
  S" G) g& r# Y& Z- G! a0 Q) x}
: l& C6 M" M4 }* z. }) X2 a, _' `
' Q" o9 |$ j. M1 f& ?1 estatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
& Y( g0 S: j  c/ m& H{- k/ b" @4 l; }# A7 X2 o: V
    copy_from_user(&DXR_data,buf,len);$ u& U0 o/ o: S# j7 W
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
4 y6 U$ @) P$ M, q$ \+ W    return 0;
3 q% E# j) z0 i& } * f, W* X, L* f- T9 a% s; ?
}
6 D5 P% m  C3 B$ z3 S$ w& A3 E) _7 ^4 I# f8 K! R
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)) a- [  U7 e% E  ^. ?7 |
{
/ R, `1 @0 b+ ~0 v   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));) v' e5 X, @; `, u& o
   copy_to_user(buf,&DRR_data,len);   ?3 r5 m8 [- o( E3 a
   return 0;
$ A# J: @) o2 w6 F3 z}
8 B- C' Z) }+ ]$ X6 L) Z
( c7 R, {# Q. O, G) {/ _$ w& ^" P; w" g& [8 t9 h
static struct  file_operations mcbsp_fops=: s; \1 ^# T  b1 W1 V' i2 K
{
0 m5 P/ A3 Q" ?" I/ f* x  F   .owner=THIS_MODULE,
, B% c3 H6 \1 V0 \# V. B   .open=mcbsp_open,- u! h/ I7 V/ D; [3 N2 H
   .release=mcbsp_release,
+ D' `+ j' C8 q8 W" s/ R  o   .write=mcbsp_write,
7 y- L0 `# V0 m& F   .read=mcbsp_read,
# V; M. j8 e/ O+ c9 _};
2 s* ~* [  i8 Cstatic int __init MCBSP_init(void). W3 c8 V. e7 V$ A
{  o- t7 P( z/ k5 v- q
   int ret;
7 s6 E( {4 X( E* S2 j, W: E   unsigned  int   PINMUX1_REG_old;
9 U4 u9 u  U9 f0 ^   unsigned  int   PINMUX18_REG_old;/ P% [& b. u7 T! l/ J% o0 b
   unsigned  int   PINMUX19_REG_old;6 [# K( r2 x3 G3 w) i9 s4 T, f8 h
   unsigned  int   temp;  
" N: V1 Y8 p! z9 r+ G   if(MCBSP_MAJOR)+ {- O9 C$ c6 |7 o1 l5 K
   {2 W( }. ~( Z- I' H7 P
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
7 {3 ]; n" y& \9 {8 Y) a8 z1 D      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);; d9 W# m8 w' |& f; f. q4 a/ _
   }& I: }/ g! B; r3 [$ L4 x1 X
   else
$ U- P' y& h" a. N. d8 }   {/ e& }8 m5 x( H, r: J5 u
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
& X1 d: ^$ O' D6 n+ ^0 w      MCBSP_MAJOR=MAJOR(mcbsp_dev);4 A, @- D$ p" A0 q6 a; Z. {7 z
   }2 k  C( u  `4 `4 }
   
  G7 F/ u$ P6 ~' F# }   if(ret<0)6 n: `2 Z7 h/ ^9 M+ y0 m
   {
! S# P5 l& X6 S1 w. {) w, q6 ^; F      printk(KERN_ERR "register chrdev fail!");
7 }- o9 B  y4 D; c. U3 y      return -1;
7 i6 O! E9 Y* Z0 ^& K$ N   }  `; g2 o& M3 F. {, e" i! U
   
* r& s. U1 t* r- G! Z  n   mcbsp_cdev=cdev_alloc();
' ~* u3 H& W) i. U5 R+ J   7 l& m7 H: Q4 S; h7 l
   if(mcbsp_cdev!=NULL)( B0 o( {5 T- _2 ]9 T
   {- G0 j/ {2 W" L0 h. p4 x
      cdev_init(mcbsp_cdev,&mcbsp_fops);
+ c8 L) ]5 _* l/ `      mcbsp_cdev->ops=&mcbsp_fops;
- I2 i7 `, t2 z      mcbsp_cdev->owner=THIS_MODULE;- @- F0 L/ `" b/ x) e7 _& ]
      
: I; M7 c$ l* ^& b+ m8 x, }: K      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
9 x! S2 w$ q& D6 C          printk(KERN_ERR "register cdev fail!");  T6 \+ @# A7 |; U; O% _6 @
      else
% p/ b/ I' D" Q- s- P          printk(KERN_ERR "register success!\n");1 b0 J8 N% j0 q3 X! v
   }7 ^, C/ Z- [7 p2 E4 q
   else
" ]# U4 n' P& v8 V( H   {
2 D+ w+ L+ D  f      printk(KERN_ERR "register cdev err!");
7 ^/ X0 n! P' S: O2 t0 W      return -1;
# g  I2 l' y3 P( T' _3 G   }
4 j: s. ?/ O! Q  Y, E   1 L2 @7 @$ c# r! M3 w7 _; }
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);' g1 H% j* P5 R' j. ?4 ?" s
   if(IS_ERR(mcbsp_class))
9 Y3 `, ~- F1 q) N, I4 A% s   {
1 U3 \1 ~2 |5 G) ^) a      printk(KERN_ERR "register class err!");
0 c+ z- V$ h# v4 }- I5 G, D   return -1;0 J! e6 k+ e! m, S. I5 n
   }2 e. h/ t. Y. e! t6 m) x+ r: \( t
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
' n0 R7 R3 A, F% e
: e% s4 E# [& C0 T+ T0 o   //PSC
$ h, p8 ]; a- ^   //add Enable MCBSP" ^2 E: S! E' q' ?9 R1 \
   //test# E1 a1 x2 N6 C# Z1 Z- N( m, M+ u
   temp = 0x80000003;' g) F9 |2 u+ d' s6 J$ _9 ?
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
: n/ _8 J6 x4 M* V3 G% h( L   temp = 0x00000003;
5 x1 h) x# y% |$ ?6 y. P5 w   writel(temp, IO_ADDRESS(PTCMD_ADDR));
9 ]/ ?( K+ H; ^5 V2 H
: G8 ~9 e( B' Y  e; Y0 D   temp = 0x001FF201;
) y6 o3 A, A7 _" m! d2 m   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
" i3 u: t2 n# [! `, u; G* @   8 t3 C7 Y- Y' q
   //PINMUX  0 U- c; u+ s7 J5 Z! q+ Y+ T9 x' p
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,* J- b7 l$ t& K. X2 u, u0 P
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
! j6 J$ A* ?' D$ ^1 V   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
! h3 J/ D$ r- ?- C% l# ^1 S( [, |   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
; t/ \" T2 F& x! W0 ?4 Y, `) D   ; e' n  z- s4 k
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
; L$ Z* K+ z% l; {. Y' \; o   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ) R: a. W8 V8 x. F7 ~$ h& o
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   ( `7 X2 b4 l3 U4 \  F# I
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);+ ]8 }, D8 U0 R$ p
  G- A+ y$ K; u5 U
   //RESETn,L138_SHK2
6 u' n% f' R2 a" |- S   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  % K# P$ G1 q3 m9 A
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
( \1 R# Y) Y3 p: j   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);8 b! E$ o, k0 Y+ v) g, G. c6 K' V

1 d2 r4 c* q1 Z
0 O  m' r' |7 Y3 Q) G: Q  //SPCR Register4 n6 z: n5 t. d9 x3 ^
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
( v' ?1 Q3 R" Z7 s) S  temp = 0x03000000;//(DLB=0)
2 f4 q' M, e) w$ | // temp = 0x03008000;//(DLB=1)6 ?$ r0 g1 F; `' D: `
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
4 a- C! V! c% k8 V' {, }$ T! f  temp = readl(IO_ADDRESS(SPCR_ADDR));
/ }/ w* ^) ^6 {3 f3 C  printk("temp=%x\n",temp);* x: ?7 R7 t6 t: K

% l! N6 Y" @& M/ K9 I$ L+ B/ P   //PCR Register: w3 u/ B" h% N
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
3 D% ~$ @$ n5 Z  // temp = 0x00000F0F;
! {% V$ h* ^: i  temp = 0x00000B0F;
% @/ Z4 y- n! ?% C6 o  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized $ T' K2 o9 L5 M& l$ L7 [+ p
  temp = readl(IO_ADDRESS(PCR_ADDR));
; C+ ]' G. m; S9 N5 O  printk("temp=%x\n",temp);  
8 `( |. M/ f, V5 N$ h   //SRGR Register3 [8 t6 g7 ~7 l8 O% _
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==112 ]2 S9 r# C) v; V
//temp = 0x301F000B;
/ I, k7 C' F) `& e   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
& r: K4 z5 n" P  `  temp = readl(IO_ADDRESS(SRGR_ADDR));, k) R+ i7 A: |2 ^& o; h( v
  printk("temp=%x\n",temp);  L8 @" b( Q% n, h
   //RCR6 g1 C) {% Z- j1 [& D2 G
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,0 W" ^+ ~, u4 \% G/ D) x
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0' j# c  a# a/ C. r8 q+ a
   temp = 0x00440040;
  T; s% g9 A) e0 r, ~   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
( m4 u% S3 @& F. j* F   temp = readl(IO_ADDRESS(RCR_ADDR));
+ n9 }% k( \+ d   printk("temp=%x\n",temp);8 k% _) c( |& B9 v
   //XCR. A6 n" B! k% s0 m9 v, _
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-17 F$ e  y* ~; Y* a  }  Q
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0. V# U( u- N  V1 l- J7 R) O
   temp = 0x00440040;
  |( X6 ]$ K7 n( m   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   0 ?  i5 l% b9 L! t8 x( }0 P
   temp = readl(IO_ADDRESS(XCR_ADDR));
4 w7 g  y# }; Z" X* N   printk("temp=%x\n",temp);6 g2 X7 O+ D6 T& b2 B
  udelay(100);
7 Q5 j. b9 L8 x7 |8 l  //SPCR Register$ ]" q& f1 n; F* n  a1 Q5 a
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
* k" x9 P( [+ y0 f+ X8 H; {- F  u  temp = 0x03C10001;   //DLB = 0 VS DLB = 14 L2 X, L  j! w/ z: I/ n4 a
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled' p5 P& I2 F1 @, ]* Y/ M: Z
  temp = readl(IO_ADDRESS(SPCR_ADDR));
9 i8 [2 V, b& j- v- E  printk("temp=%x\n",temp);: F7 K+ f0 ?& W2 |4 A
  udelay(100);1 ^3 ~* O+ `3 ]  v% V' v: l/ V

' q( Q. h: L; Y' F0 f5 |  //set GPIO direction
  [- e5 o4 o( a$ H6 I   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));  l2 L$ g2 f/ P0 D# Q# C
   temp = temp | 0x00000100;//EPR----input* ~$ F+ U5 ~9 B2 ]  c* E: e% e
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
+ q* L( D9 M4 N4 K) R9 R1 H   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); # Y% Z5 H' f0 }% E+ T& w
7 G" T% E$ {' a% z" N
   return 0;
& O3 F; R/ c  g& w( u& ?; _" o}: X* N) ?" {* h3 M( X
static void __exit MCBSP_exit(void)
( @1 K3 Z7 C2 O2 e+ p* s% u{7 x5 Q% J' T5 [% I" A, I
   printk("mcbsp chrdev exit!\n");' r+ I& j* @9 [1 w2 a2 Q
   cdev_del(mcbsp_cdev);
5 M! w$ R( ]; m. I   unregister_chrdev_region(mcbsp_dev,count);2 A& s& Y( N" C9 y
   device_destroy(mcbsp_class,mcbsp_dev);3 U7 [$ W4 o, K8 E6 n
   class_destroy(mcbsp_class);
* X; d/ X( I7 _* d1 g; ]. @8 h}: @; Y) N1 D7 t- E( m- _" P' D
module_init(MCBSP_init);
6 L0 o' n$ I9 v0 E# y4 I0 nmodule_exit(MCBSP_exit);
1 h* @4 K% h4 U4 X" T: A# M4 M5 v- \( o2 D
MODULE_LICENSE("GPL");
) w# ~$ G9 _0 @+ r- @/ a# |( i) U& W' B5 `5 G
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
) w5 P7 x- G6 d我的应用层的测试程序如下  [1 ?" Q* L' K0 c+ j0 S8 Q% Z
#include <stdio.h>
" }9 r0 U+ T" E: [' C4 @* Z#include <string.h>! u6 N, }" z+ n, p- P. h
#include <fcntl.h>1 J" ^2 T6 }2 \9 T
#include <unistd.h>
9 {+ r, d6 W) s! C" `#include <signal.h>
( D. ^( ?& d1 \/ z* |! S4 q" i#include <pthread.h>       //线程1 s$ I1 V5 |0 p) p! x5 N
#include <stdlib.h>
( p, b  D* `+ w8 |#include <pcap.h>          //捕获网口数据. F; _; r* X% }* r; A) V) S  K
#include <semaphore.h>     //信号4 i& v5 v, B. d) a
#include <sys/types.h>     //消息对列
) O2 E, r* j$ |& t( u, }#include <sys/ipc.h>       //消息队列1 P( c/ G  H, P" u# Q5 V
#include <sys/msg.h>       //消息队列7 A7 a, K! }2 C" k: }: _
#include <sys/select.h>( J0 O1 r( V$ a) z9 l0 Z
#include <sys/syscall.h>2 `4 u& m9 w$ U3 n7 o* X
#include <sys/stat.h>6 F4 N; z: G5 i% D
#include <sys/mman.h>
; _. F) |4 {, T+ M8 |#define msleep(x) usleep(1000*x)
$ N# e$ _. ~& X; D: ^9 e/ c/ G" L: Q5 H+ q2 C' k+ P
int main()/ ?- |. @1 e% g" i, _8 a
{
: v- r" w$ s& W" a: j    //MCBSP,ARM与AMBE2000交互设备8 I9 k! |9 ^- e9 w2 I9 `! i
int fd;
( n! @- n7 w( l/ f unsigned short data_write = 0x5555;: d3 q# Z) P; o* y  \0 m' c
unsigned short data_read = 0x00;2 I0 a5 Q1 u! w% {2 z( r
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);- V. X" q. W/ E. B9 M3 N& }, D
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);" _( f9 p5 e, [9 p( C8 G: R
    8 ~" N4 L7 W! \5 V1 S' q
  if(fd < 0)
1 Y& ^/ y7 n- J; v* ?+ z$ J  {
! j% J5 b0 d1 z$ D" z. p& C4 i     perror("open failed\n");
8 \" ]3 q$ E# e7 S# M     return -1;
, D& p0 i4 m" y* W% [  }
& q$ u/ f, W; P/ B- _  0 j8 b* O( F% ]" e3 w
  while(1)
. u; j6 a; q) ^# x2 ~) e: R: f  {
# V  T: F- {( a1 A1 E2 i   / I- C/ Z- _) U9 @& c6 y2 l
   //AMBE2000每次读写是24个字为一帧
9 B2 G7 W9 P4 z   //写数据时将数据在底层存储起来,等到中断的时候再发送
# f3 c6 z- u& j/ f! e   //AMBE2000输入数据是以0x13EC开头的8 y" k$ F, I% x* e  d
   write(fd,&data_write,sizeof(unsigned short));* v$ Z& I( A( U
   9 I$ e, g, l1 `9 [; p
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  9 T6 T/ S4 L5 u0 U2 a  P
   read(fd,&data_read,sizeof(unsigned short));
- s4 L( C& Q# A, w5 W   ' H7 w; `& [: y
   if(data_read == 0x13Ec)
/ M! _2 F4 p! |9 @' B- C1 T* V9 b   {
  |5 n+ `2 H9 L# U; Z   ) G2 ^# R4 k# g4 q# [% u
    printf("data_read = %x\n",data_read);: D5 _' x) I7 r
   }" e. h' B7 g9 L+ ^6 R7 N
   - O: m- J( ^3 L( V
   msleep(10);9 K; f- l6 {$ U' E$ C5 [4 |% N
  
2 ]( p8 Q4 R' C. d2 Q* R. h  /*. e* f* X. P6 ]6 t" W
   ioctl(fd,1);   / z) Q* e% T2 p9 H+ `
sleep(1);
* J5 n, O. R6 _" b: k' i" e ioctl(fd,0);
5 H4 D$ O: I$ [4 m3 X  w# d- ? sleep(1);6 t6 [+ w1 Z" X
*/
* B. i# Y6 U- L2 g& s9 G2 I  }   , Z& x, ^! g6 O: _7 s
return 0;
$ R, p  d5 g+ q' _
' v% w6 c  Q6 D}: Q/ [5 c- F, v

" E  N* k4 N, Z# N; O; a# T多谢各位指教,谢谢! 急
2 t5 J7 a2 Y+ c. M* H3 ?% u' F) ]; ]: a( H
. c. b9 m& T; t* \( p' p8 ~

, ?. p6 s: ~* m9 i/ Q( }/ b- @4 @$ t0 c- a5 f
  M8 W! m  a( a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 12:10 , Processed in 0.040298 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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