McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 5 [& U& L6 U8 ~( G0 t
/*
+ k1 J, J9 ~% Q6 M, o( F) n * Copyright (C) 2009 Texas Instruments Inc
3 ]& L8 o, [2 H8 x" s+ B  B *7 W+ A' W" m: W1 `2 d
* This program is free software; you can redistribute it and/or modify
0 t" J$ f( P, x7 i: F) q6 y0 M * it under the terms of the GNU General Public License as published by. o# r$ F2 d0 N2 [" D
* the Free Software Foundation; either version 2 of the License, or" I  g+ m1 j" [* H( e; x
* (at your option)any later version.
6 \/ ]& z( z' m' ]) G) ^ *
3 \  \: r& d. Y4 V$ t6 v- j * This program is distributed in the hope that it will be useful,
. t5 |9 \$ k. s* Y+ t* y7 j * but WITHOUT ANY WARRANTY; without even the implied warranty of
2 v+ ~3 r3 F9 C0 q, l0 e' m; ? * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ Z% B+ A, O* ]0 w
* GNU General Public License for more details.
0 w: [$ v! c1 v# ^# \ *1 U' r/ C  S1 q( {9 s) V. H8 r
* You should have received a copy of the GNU General Public License5 f9 ~) W2 l" e# U: L  F8 u
* along with this program; if not, write to the Free Software3 [' D1 m4 c: t2 J6 P
* Foundati2 e3 q! q3 U7 }4 u2 J2 ?
*/' P) G5 R& d0 v
#include <linux/module.h>
0 k) R# M- C2 N; R3 \3 a' |+ x#include <linux/init.h>
" U9 T& z, Z! ]# Q, ]) A( f' d: r#include <linux/errno.h>( y# w! \+ r( v. k/ T
#include <linux/types.h>
8 w" O- y6 L, x: C3 t#include <linux/interrupt.h>: N8 D! u2 a& y+ R* {
#include <linux/io.h>9 B! R6 `4 Q! ]9 m! E' j
#include <linux/sysctl.h>
1 P  Y% }" f& [+ w8 `4 d' ]$ }! ?#include <linux/mm.h>
5 W0 z# B$ |7 m#include <linux/delay.h>
! h9 W; I7 V4 C6 G( s) i# z5 V#include<linux/kernel.h>
1 G! e  c: ]/ R1 |: m+ \+ t#include<linux/fs.h>
; ^9 r; s3 k, O: `#include<linux/ioctl.h>8 B* v4 Q$ q" H" H
#include<linux/cdev.h>
& A; D$ q+ a" S/ U5 l#include<linux/kdev_t.h>  E/ V' D( m: d( \: K6 |3 _1 B
#include<linux/gpio.h>
$ B, D, v: [" X' N. D; W6 P4 D#include <mach/hardware.h>
5 C) M# U9 l  o. i: K0 v#include <mach/irqs.h>
7 y  `! @; x2 A$ F
# j" U# o' e+ I6 u#include <asm/mach-types.h>0 D, v! c. m6 Q* K; O3 V
#include <asm/mach/arch.h>
8 f$ i7 _+ m! ?% r7 c#include <mach/da8xx.h>
0 U, c3 W( f5 m4 }3 c) q#define  SYSCFG_BASE   0x01c14000
! @: F2 W0 w! v: i- B  z#define  PINMUX1_OFFSET   0x124 + p4 H% }* F& C  y/ i0 K* f
#define  PINMUX18_OFFSET  0x168 , t0 @) U6 {5 [: W
#define  PINMUX19_OFFSET  0x16c
/ R, f% }6 j1 B/ W5 f#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
% K! @+ Z3 o1 O5 p6 x#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR% v* ?- h4 l; i5 l7 A. g/ j/ P
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
' @6 h( C0 y& e6 K/ u) ?5 j#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
+ \9 E' j$ k7 Y6 G#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
6 V+ ?* i  B. X* g; D                           
$ m" d4 h. J! h: l#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
4 e; g' f0 B- D9 j#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
. y8 X2 Y: a7 @7 ~4 \$ O) R  }2 a//PSC$ e2 @8 q0 _3 n1 I7 X& A2 I
#define  PTCMD_ADDR   0x01E27120  ! x# D7 F+ y: Z+ O1 A' l
#define  MDCTL15_ADDR 0x01E27A3C2 J* z' F& r! A5 o' [- ~- ~! ]
#define  PDCTL1_ADDR  0x01E27304
/ d& b1 P% x5 E7 K9 b& _//GPIO8 direction
# L) J8 `4 [7 y& t' X#define GPIO8_DIRECT  0x01E260B04 T; M' m9 }" q$ x5 D
#define GPIO8_OUT     0x01E260B4& |: F" J, s+ I# v4 x
#define GPIO8_IN     0x01E260C0" s$ E# |; Y8 o8 \+ F% I0 L

0 v) [9 ]" }9 J. l+ y8 T//#define MCBSP1_RINT    99              
) ]8 E: @# W4 ]2 P3 V+ y  [//#define MCBSP1_XINT    100  
( x/ d; H: Q) }static int MCBSP_MAJOR=239;" a: r1 @  {3 O% E) o4 j: b
static int MCBSP_MINOR=0;) z1 S8 M, g% n$ H! y* o2 ?4 F
static int count =1;5 P: d- h( V; c7 J/ g
6 |; ^: O+ A1 v3 n5 \
#define MCBSP_NAME  "MCBSP-device") R4 T5 H2 k& x4 p: u1 A: d
; |4 n  k0 a1 v8 Z
static struct cdev *mcbsp_cdev;
0 o9 a; V9 p# j. rstatic struct class *mcbsp_class;& ]' q* Y8 P, D1 u% J( Q# j3 X% z
static dev_t mcbsp_dev;
" [# g1 }: K% y. o& ~unsigned int DRR_data;
5 j- H6 k( w' D: hunsigned int DXR_data;( h5 {& \$ o# p7 s3 ^1 b
static int mcbsp_open(struct inode *inode,struct file *file)
% _, p; k" K# e  d3 T{
' U6 x+ q' H+ ~7 W   9 Y+ m# i8 F; N5 j
   //interrupt enable,initialized  g1 ?9 p- m6 K: ~2 C- a! O
   unsigned int temp;$ G# ^0 z0 M( a# q- \
   //SLEEP_EN(GPIO8[10])---0$ b9 M! g, r! Q+ b& M% L0 y- ]! y
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
! p6 }: c% j( [- P) d   temp=temp&(~0x00000400);' C2 r1 z; P/ ~7 g0 Z. }
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]: i# i9 a0 C" U. T1 y
  //RESETn(GPIO8[8])----0----1. J( I2 L: J/ W
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
5 j' |& ?# _) U5 h% X3 h0 q- I+ _# H   temp=temp&(~0x00000100);' F( L) `! c, ?2 U3 p0 ?6 R/ g* [
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
" h- G4 G  W) [, K& P   udelay(100);
/ m- c! G' ]2 `7 y7 ^) \% p. l   temp=temp| 0x00000100;
6 `# o2 Y2 L8 w   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
& x+ k1 n1 _; A) m( a   udelay(100);" Q9 @* i: H' Y
   printk("open success!\n");5 S" R: y+ G5 u
   return 0;$ T5 v) B; M& K
}  _! R* ^& a( o. B
  ?4 h* S5 P4 }5 n5 M
static int mcbsp_release(struct inode *inode,struct file *file)
" k/ ^1 P5 M5 s. e. d( H2 O; W{
/ F5 r- D3 g5 r5 F. k   printk("release success!\n");6 t: o+ ~' s4 I% G* a3 B4 }
   return 0;9 x( P! s% y! Z  U
}
1 b; ?/ O4 w+ r' c+ p, }
& g1 c. K4 P* Pstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
( ]' N7 l% i- h6 r{3 N( y6 V4 F6 y& f
    copy_from_user(&DXR_data,buf,len);6 u( ~3 `8 _% |1 j0 O$ @
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       + e/ S' N. M) V* E
    return 0;6 |) R2 u; d) p! m# G4 G

# p$ ?# G+ J+ u}8 J% T: v$ V+ Q' W2 Y! v

, ~/ N. n2 o, F. J- Istatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)" ~; [/ J1 S3 h7 Q; y) ?. v6 H
{ ( Q% B! \* p5 s; L6 Q  S, D
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));# X$ {+ c. }, c& Y# y
   copy_to_user(buf,&DRR_data,len); 5 f. |* B  Y' X( u9 b9 a8 C
   return 0;
1 `- ]0 [2 y* G}
" P, S. o/ R& Z
1 v/ {. ^. B, \* E* F- O6 M' j& J( p6 I* v6 `  G; j
static struct  file_operations mcbsp_fops=& {3 Y& j+ p0 q: A4 T1 d
{
* E6 b0 ~/ g8 d: c; B  A$ e   .owner=THIS_MODULE,3 N3 v' g% P% k2 j5 ^
   .open=mcbsp_open,
+ D+ o- M" o0 G  U' ?6 p! F0 O  u+ N: ]   .release=mcbsp_release,: [  F/ T5 ]& P$ a4 m& b
   .write=mcbsp_write,
4 N' X7 k: {( C% ?7 W2 q   .read=mcbsp_read,
" b3 H3 h% p, c4 p2 `};
) \( Q9 r/ a9 M! v; S' ustatic int __init MCBSP_init(void)
" h7 y- R* i. W) I1 n, O{
; s/ U( W6 X- B   int ret;; b, x; ^/ A" P6 n1 c! I) L5 m
   unsigned  int   PINMUX1_REG_old;
1 G) J: K. b% C- l) ?& v   unsigned  int   PINMUX18_REG_old;& ]1 [0 J, |; \
   unsigned  int   PINMUX19_REG_old;9 \! z1 b! U4 D
   unsigned  int   temp;  9 Z, L% X' Z; t) ^7 z* W1 T. ^0 ?
   if(MCBSP_MAJOR)
' k/ H4 H- p7 [" ~, j; W6 @; C; u   {) b% ^$ U% p6 Y: i
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);4 P- y. _1 _3 \8 ?
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
  V( H9 F6 K. U( L   }
, h  ~. |- e9 _1 m   else
- Z2 y$ E0 K! V- {% g   {; e. N6 _- }; a, C1 L
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
0 q  S; H$ u+ s- f      MCBSP_MAJOR=MAJOR(mcbsp_dev);- x  x+ R1 I4 b
   }
* |; k7 x' Q% g1 u+ g  W( P6 P   
) r8 V; B/ x, M) I- }   if(ret<0)4 J$ H" L/ g& S% z+ e. S+ y# Y
   {$ t4 Q) `' C( O
      printk(KERN_ERR "register chrdev fail!");: D- m' [7 l. A9 p- R
      return -1;9 \1 |9 F7 p! M  M7 n
   }
- F# M# P4 I3 a8 Z" F9 {* j' P. F   
- k/ G; s! {9 p0 c5 k6 n# ~1 |   mcbsp_cdev=cdev_alloc();
( i9 H, C* H+ [8 m" y$ C   
* q* ~' h5 r: {6 `1 v' x$ s4 u   if(mcbsp_cdev!=NULL)" u$ o/ j5 l* K
   {
5 a& ^4 f4 r9 W4 X      cdev_init(mcbsp_cdev,&mcbsp_fops);
9 F7 N% q8 J% |" k& Z4 w& Y8 I      mcbsp_cdev->ops=&mcbsp_fops;' s2 I- ]- @/ ^+ q6 Q
      mcbsp_cdev->owner=THIS_MODULE;
& V3 u8 b1 l7 J& I      0 M; s4 h2 ^7 c7 ~( D, A$ l
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))$ P- U; A8 f5 M" h& S8 u' d8 A
          printk(KERN_ERR "register cdev fail!");
0 ^, S, C  E+ B4 U      else4 i. W; Q6 X" r2 K; t* v
          printk(KERN_ERR "register success!\n");" s# [" `+ Y7 t( b: v" V3 z. h
   }
% Z8 u: _$ f8 {6 F   else, c* \$ y% e& o# {  i
   {
8 B2 n( K! F% t% |      printk(KERN_ERR "register cdev err!");! _& }, _! b& y. ^, c/ C2 z5 V
      return -1;; z9 }- z4 B6 e8 M' {  t5 v
   }4 i& @8 q- ~$ w4 x7 @0 k
   
* U2 H" j5 i* o! c& s  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);  h' H, I8 r6 C
   if(IS_ERR(mcbsp_class))% W; V8 p5 }0 ^( p+ h
   {/ e& e  S8 N3 `
      printk(KERN_ERR "register class err!");0 P  f0 l% B! Q6 P- K  @/ z
   return -1;6 l$ P( Q% o+ k7 k. a/ x
   }5 x8 n: I) ?/ d
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
+ B+ Q8 @8 D! Z9 k6 ~: g5 \1 Y5 \2 _# b& Q# c2 H1 t
   //PSC* s. H: j' A- `8 K5 v
   //add Enable MCBSP
9 h. ~/ I+ b6 d0 r   //test
" V" P+ P& u/ Q$ V- }' d  }2 z   temp = 0x80000003;  B  m; v" E) \! k7 y
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));9 [' N/ ~5 M! h; p; P
   temp = 0x00000003;# X) x2 Q) P4 O( e' I7 g! N- }% O
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
+ D8 g! B- ]/ _
3 Z" q" R( `/ J- e   temp = 0x001FF201;6 J' t, y5 z) V8 s* x# s
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));9 W/ G0 w+ l+ l! t; f
   
$ t1 S  ^0 q& F& F4 M& e   //PINMUX  , G. \+ ^, Z' N: i! E
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
+ ]! }6 r, |- c6 a1 S( n) G   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
. [$ `) S( G) v* J" r   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   4 ^, o: n9 v+ S# C/ F
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);5 y' [& m$ j, E. P1 M# _; [
   4 I6 [: c* v( g, u# ?6 d
   //SLEEP_EN,EPR,L138_SHK1,L138_RC2 K& L7 y& }8 W# w  M' o% o: Q- `
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  5 H" c! y6 J- y* N1 A; H; ]; c
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
6 H! r' ^( u$ z+ G8 @   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);/ b4 R7 `7 s, q/ w

" e! S; |7 w/ L* p; I" P   //RESETn,L138_SHK2. f" @& a: ?  U# h
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  * B, J* N1 s$ |( B! n( p
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
' y/ Q# D& a2 ]   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);" U$ [0 o/ V6 f+ ?2 t/ U

! m% l! L8 H; n% @ 3 v; n! T3 G) z. l( X
  //SPCR Register
& Q6 @5 }  q8 I+ n  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset! [7 ?) H7 H4 H2 j$ n! ^
  temp = 0x03000000;//(DLB=0)
% O& u. u1 C& P% p5 s+ i: \8 k // temp = 0x03008000;//(DLB=1)
/ ^) a3 N) e7 D! x  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset7 C# f0 n# {( c- f( C  b
  temp = readl(IO_ADDRESS(SPCR_ADDR));
( b9 V. k3 A) q8 z! B4 f" C; L  printk("temp=%x\n",temp);- y- c5 K% _. m/ }0 v
8 l* k7 b3 t! ^5 u
   //PCR Register! S$ J2 i+ K+ N" o
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
* R) l. j9 G) W, Q  // temp = 0x00000F0F;
, x7 N* N4 G3 a/ `$ ^  temp = 0x00000B0F;
$ w8 o) c9 R8 w2 K. k  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 3 l8 p% f5 A" h0 u% O! G
  temp = readl(IO_ADDRESS(PCR_ADDR));3 x$ I# `  Z+ z/ G$ L8 \: ]2 K
  printk("temp=%x\n",temp);  
8 y2 {8 P( ]. M9 d/ I5 Q   //SRGR Register" }3 V% r5 G, {
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
5 O: W, h" [2 i7 m, M9 |7 U //temp = 0x301F000B;
, K8 b0 G8 M* O! {3 u   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ! O# k( E0 x$ J/ F
  temp = readl(IO_ADDRESS(SRGR_ADDR));: t" N0 f8 }% T* }
  printk("temp=%x\n",temp);
5 S$ u4 p' m. p3 F+ ?   //RCR
( ~0 i+ e  c0 H) n3 R. f   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
; ?+ j* i6 j( n  ~0 `/ ?% `8 M   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0  J" L; A7 C8 ]' @$ Z4 R
   temp = 0x00440040;
! N, \+ P, i# e% |) K   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
5 i/ u5 H8 s/ u+ y  |   temp = readl(IO_ADDRESS(RCR_ADDR));0 E5 _# M% w6 e: H" t
   printk("temp=%x\n",temp);
' w1 c: i8 W0 @4 k8 t   //XCR
9 q* l3 Z0 m: u   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
. c+ M5 W- R5 m, C1 b* o7 i   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
: E! l0 o: k2 z   temp = 0x00440040;7 A$ x( m3 G0 h* V0 Q6 d
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
7 [: S7 }8 _$ H( u1 W   temp = readl(IO_ADDRESS(XCR_ADDR));1 H1 `; |* U  s9 S* O2 T( f+ ~$ j
   printk("temp=%x\n",temp);
, ^# |, e- [, V% P4 O  udelay(100);
/ F& L! N2 @( d; X# S) Q3 Q  //SPCR Register; N( _6 c4 H# P1 i3 ?) \& Q
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1& x5 {: a6 S1 @& c
  temp = 0x03C10001;   //DLB = 0 VS DLB = 12 s$ P! c6 h' J% ?
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled- l  o' H2 h9 F, E1 D1 A5 s
  temp = readl(IO_ADDRESS(SPCR_ADDR));; C' _* b/ v) m% x! B0 u
  printk("temp=%x\n",temp);1 e9 w" ~4 l- Z$ `% c0 u! q
  udelay(100);* `, d; }* W, T& i$ z' x5 a8 O) S1 p

6 R4 Q& k& y. Z; X. |9 o7 y  //set GPIO direction+ j/ }  [6 E* [4 x, p: B. y% w
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));5 U$ N# w1 f$ r5 y3 B
   temp = temp | 0x00000100;//EPR----input
+ L+ R; i1 m0 x$ t( m4 J6 j   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output5 l5 N/ Y9 s3 M# |1 |% ?) [
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
- j" D. m0 ]# V, o7 n5 `. g % u1 q! }0 u7 e. m
   return 0;
- j+ k- W$ U+ x$ y( R& C}
( v4 T8 l( l# l2 V1 xstatic void __exit MCBSP_exit(void)1 z7 Y: i, i. }2 p; t
{$ i1 ~5 \- ]6 f1 l
   printk("mcbsp chrdev exit!\n");" w" X+ p/ \$ }( Z$ `" P& e
   cdev_del(mcbsp_cdev);9 U; P7 @! H8 `# {% s$ D
   unregister_chrdev_region(mcbsp_dev,count);* ?  d' P& \. g4 e% |: O9 m
   device_destroy(mcbsp_class,mcbsp_dev);
0 Z9 j- c6 R7 `: p( {: V5 ?1 U   class_destroy(mcbsp_class);
. n* H, c8 w5 f4 c* |) k, H8 E}
! z) [: e: A8 j2 e1 ?module_init(MCBSP_init);
& O6 y3 z/ A$ Smodule_exit(MCBSP_exit);
4 l$ _3 M6 v% E. r
3 O+ a$ l4 \* b) z. g: ]. BMODULE_LICENSE("GPL");
# @8 y5 V8 l5 ]. F: a% s+ g$ s! b, o4 F- [. V
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。2 i2 B/ I( U* D" g# a- j3 f9 I0 u
我的应用层的测试程序如下$ r% @) k* i- w7 U' c2 F2 V
#include <stdio.h>3 G- K3 a' F! T6 C: M8 H8 z
#include <string.h>
. Y/ F8 I" |7 h2 e$ @#include <fcntl.h>
/ s( U9 H8 f4 A- _1 ~* Y- @#include <unistd.h>6 L3 o( d' p0 _
#include <signal.h>
, W5 K  A0 B& ?  C#include <pthread.h>       //线程
% |2 C: F. v/ t4 Y#include <stdlib.h>  Q$ G" X' m2 q3 n0 U
#include <pcap.h>          //捕获网口数据
$ t; j1 c/ J# B/ k; f- K6 d5 b#include <semaphore.h>     //信号
8 S. ]3 M. f3 g#include <sys/types.h>     //消息对列& e" S. |2 X8 m3 ?+ D4 Q
#include <sys/ipc.h>       //消息队列$ a. B9 n% u8 J2 P9 T/ ]
#include <sys/msg.h>       //消息队列
& l6 u$ v2 A# V#include <sys/select.h>
; G. i6 b% ^7 r! y( K#include <sys/syscall.h>
- e( |; P& v9 H+ ]6 L#include <sys/stat.h>
# O# w& X7 S) Y) ?3 f+ u#include <sys/mman.h>
7 y6 b8 R8 ]( L  `#define msleep(x) usleep(1000*x)" c3 j3 S5 V, \

$ A  o/ ~( O8 G( |int main()$ V  b7 h& O4 A0 f+ j
{
& ]  G4 n5 ^- t& S    //MCBSP,ARM与AMBE2000交互设备- S+ R( f2 q' w: m0 o+ m1 A
int fd;9 r$ ^( N, \6 f2 c( C
unsigned short data_write = 0x5555;( b3 G* D( f( L: O6 B; E
unsigned short data_read = 0x00;
. O+ J1 U: h7 o9 ]- P- M1 A  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);0 y1 r5 m9 \0 a
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);( F0 a' Y) J* f
   
* J6 C- E" x5 t6 ]/ L$ ^  if(fd < 0)
2 X5 r, ~7 j" K  I* z+ F# _  {6 t. ^' n1 c( L% ^7 A* b
     perror("open failed\n");
5 W* Q3 z6 ?$ |# y+ e. J, r' ]* ]. Q     return -1;  j6 G# `1 ?5 ^: q  C5 B2 i% j
  }  N5 i2 X1 E2 O. i0 Q9 B% a
  + H5 F& Y+ H' x, G! w" Y8 m
  while(1)
3 y5 K9 `5 {2 H/ L1 ?  t  {
( v! C* X9 G- P; E   * }- u9 j* ]: }3 V
   //AMBE2000每次读写是24个字为一帧# v2 n: O( Q+ W! r& r+ R
   //写数据时将数据在底层存储起来,等到中断的时候再发送9 t7 r1 V" Q: b2 d% H
   //AMBE2000输入数据是以0x13EC开头的
0 z' X1 |- V- y' d5 S   write(fd,&data_write,sizeof(unsigned short));
3 o; z( S3 G1 B! Y   0 {: m! H1 v7 ~8 V- z: r- I& \# ^
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
% n+ Z& H2 z0 w9 o   read(fd,&data_read,sizeof(unsigned short));- D9 F  v4 h, f: r! G" P/ |4 O: I
   $ `3 [; U/ `9 i) n  u
   if(data_read == 0x13Ec)( D, G) X9 E/ ~, W" T3 v6 b
   {
! p7 r/ f& {0 |( f6 [   # b0 }0 @1 ]% b0 N& V3 j
    printf("data_read = %x\n",data_read);0 o- O% T, w' c  x, f2 P
   }$ Y7 B+ H% l: u9 E7 `
   3 w; @  c7 D" e
   msleep(10);$ X. u* O1 B  R
  ' r1 f: E( i# B: k
  /*
1 e& ]( |# V; _3 Y5 d5 Z( T   ioctl(fd,1);   ! Q, d+ S6 ]$ ?" J0 y/ u3 m
sleep(1);
, Q# F, a( O2 c, [ ioctl(fd,0);
; ~. n& `/ H. W& c4 t/ m* g, |" X sleep(1);
6 g- q& [% m- C. \6 k, V */
1 \( Y, N" L' ^& e% _7 q7 s/ M  }   : n9 m+ k. ^5 f9 h9 ^
return 0;
2 b3 x9 }' Y' M
( {7 l+ r+ |5 |4 y4 [}+ g  y1 y$ W: x' s
+ H4 Z1 T4 A) C5 D: O, j
多谢各位指教,谢谢! 急
, W4 ]6 ]2 e1 U9 R% K
, F! E! I3 [7 p) H- Y$ `- [5 [8 r1 R  G

. j% Q( f# m3 I# X, ]( {
, F8 Z6 y' D9 G! `# x, c# d6 r; c, y: X+ f) D. x7 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-7 20:59 , Processed in 0.049573 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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