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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: % T8 z9 B% X' j" ^$ d
/*# H1 s5 s4 m" `
* Copyright (C) 2009 Texas Instruments Inc, x* H8 ^* T9 ^# D: S+ [
*0 C& N3 c/ Q: h
* This program is free software; you can redistribute it and/or modify5 U8 t8 B& }& a! j2 N
* it under the terms of the GNU General Public License as published by
) X. {1 J  A/ _! |  p, X9 n  K/ ` * the Free Software Foundation; either version 2 of the License, or) D. a2 l4 f5 c$ p
* (at your option)any later version.
* w9 K6 o! E7 O+ C* k *5 h8 O8 V/ x" f/ H$ t8 D
* This program is distributed in the hope that it will be useful,! _! V& g' V8 m5 G! x  T. X
* but WITHOUT ANY WARRANTY; without even the implied warranty of
& r1 K# K, Q9 n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
, g8 k4 j- k1 M' }& a! I * GNU General Public License for more details.
9 B5 j& w& E( R *1 h5 Y6 a% Y5 y
* You should have received a copy of the GNU General Public License
  B* d3 H$ ~! @3 j) @" D' H * along with this program; if not, write to the Free Software
9 [6 L+ |% F& a; q* J/ J! P * Foundati& r$ o8 D" J0 V5 X7 X0 G$ w
*/
* |9 m: r/ _, z, l: x- ]#include <linux/module.h>: h2 J. x% G1 U: Q& V, ^, l
#include <linux/init.h>
$ R2 P+ b/ a' W/ h2 {' x#include <linux/errno.h>; L5 G/ W. l. g+ p
#include <linux/types.h>$ M) C) o' P8 ?$ ?! E( z
#include <linux/interrupt.h>
9 R) e8 I- ^1 C$ j7 `: _#include <linux/io.h>* P" T: y. W  m/ _5 N' m
#include <linux/sysctl.h>- O/ N8 J, ], k& G
#include <linux/mm.h>8 ]% k! i4 J5 L" Q5 T
#include <linux/delay.h>/ G+ B7 D+ A& N5 `. W+ N
#include<linux/kernel.h>& q. T' v* k" ]3 c4 G: s9 p" w
#include<linux/fs.h>, z! a* G% q/ M3 Z4 V: F
#include<linux/ioctl.h>  F; T; i8 J# f
#include<linux/cdev.h>
' G( m8 [0 R- W8 G0 o7 K( ~#include<linux/kdev_t.h>, p' d( @, b! q4 \, R
#include<linux/gpio.h>2 V9 o6 h% L- V! K/ l
#include <mach/hardware.h>" a7 r1 a5 E& j
#include <mach/irqs.h>; g' h5 S, Z6 _! R. g

# M) [, [' Z. S+ O% M  R#include <asm/mach-types.h>
  b+ G5 `# N1 J( n% ^+ b#include <asm/mach/arch.h>
' W. N: f% @' E- Y6 Z4 \#include <mach/da8xx.h>
1 n/ |* H3 r% ~" B0 F' s: n#define  SYSCFG_BASE   0x01c14000! X, R; D2 g/ Z8 B8 A' g
#define  PINMUX1_OFFSET   0x124   s, P5 x/ W) y4 G
#define  PINMUX18_OFFSET  0x168
5 j/ v, b' N! G( {, w#define  PINMUX19_OFFSET  0x16c: [$ ?9 T7 B% D& j5 D- V
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
8 T  J% v: F! {5 E3 V#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR# F3 `! Y& }) q1 H
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
- F; v" m' U/ m#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR6 I; p, W: w* E9 q) u, g+ \" u" q
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
& p8 y* P/ p# F5 D: ?+ C                           
' \* |4 A2 C+ S& _% Y$ g/ T6 Y#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
" v( y8 a6 ^2 D  N#define DRR_ADDR      0x01D11000  //MCBSP1_DRR) k( ?# f% G- p7 ]  T
//PSC) D$ u+ D; h6 a# o# s
#define  PTCMD_ADDR   0x01E27120  + n* r7 z! [* i
#define  MDCTL15_ADDR 0x01E27A3C2 r4 o: ^1 H9 F; T
#define  PDCTL1_ADDR  0x01E27304
. a# l* a8 D- \, r0 L  K: c$ ]//GPIO8 direction9 }) r! d, ^  B  o
#define GPIO8_DIRECT  0x01E260B0& D2 I# E: u, M; ^# v
#define GPIO8_OUT     0x01E260B4* N. r1 |* z9 I5 j' A' `
#define GPIO8_IN     0x01E260C0
4 Y3 }+ d6 o. f( I; p7 U, R' e. s3 A% h# t, m/ J! x: z
//#define MCBSP1_RINT    99              $ D7 e8 z, N: L: i1 K
//#define MCBSP1_XINT    100  " b3 s0 P+ O! }+ z
static int MCBSP_MAJOR=239;
% t4 g, J! C9 R7 L: ]static int MCBSP_MINOR=0;
0 J  O8 D" E7 S( _1 v( g6 B, istatic int count =1;, n' B0 \& N4 g4 ?) \+ }6 M4 w
+ M7 K' I; a+ i) h3 t5 U7 o
#define MCBSP_NAME  "MCBSP-device"
8 R: ]2 V/ }- g5 I0 @1 E
) i; T& b' M5 H) f4 H* zstatic struct cdev *mcbsp_cdev;. C+ O1 K7 i! [* L
static struct class *mcbsp_class;
  y& U$ p8 v2 C0 ?0 y5 e% f2 m% P* J2 `static dev_t mcbsp_dev;# C; O) j, Q9 q$ W: ]' ^
unsigned int DRR_data;8 m" C* V" O0 F1 U; j: a. A% ^3 N
unsigned int DXR_data;
/ r* f5 V. o4 j6 mstatic int mcbsp_open(struct inode *inode,struct file *file). ~0 E* P* m) N. J6 O+ C
{) G9 A: e1 e# {# ?2 Y+ y9 W# W
   
" B  e' B# x" r- p) m   //interrupt enable,initialized! \/ z5 m6 e) {" D% T* O9 n
   unsigned int temp;
6 @+ E/ |0 n2 I& H) W4 O  m( Y   //SLEEP_EN(GPIO8[10])---0
3 x0 X$ S' T: @9 R   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
/ t; r) T* A4 A" u1 Q) ~   temp=temp&(~0x00000400);
6 K% g. B- ^# e( S+ P. o0 y   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]; o2 N2 p/ V* R0 K
  //RESETn(GPIO8[8])----0----1
& W. `* J. y0 W' z   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
. H, ^5 @  V3 q   temp=temp&(~0x00000100);$ m2 K5 E. [6 N
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
& M# s7 r6 Z" |2 P! e   udelay(100);
1 ~2 T! q2 i* v# |+ m0 b8 x9 W   temp=temp| 0x00000100;5 O- \+ [# U5 B- H  H9 X
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1; i, U' j+ L4 a: N. V% A3 Z
   udelay(100);
8 P1 m) _& t' V   printk("open success!\n");
1 R4 ^' ?/ e6 [   return 0;
2 }) m/ [. n4 a, D}
9 k9 B. P  }0 `0 G! m. {* P3 I/ e4 c: Q! D3 S! d& X
static int mcbsp_release(struct inode *inode,struct file *file)
7 w$ v" p1 k7 f, m{0 o: i  A1 a, k
   printk("release success!\n");5 r3 T8 ^" {0 D4 W
   return 0;' t& [; D1 E8 |# M, d: q
}
; g* m& f% K2 l3 @) w9 I- s, s. _# w& Y1 a/ w) i; n. O
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)" e$ j) [: {1 t7 r$ |
{8 ^5 u+ t# e/ l/ [* u- g& N9 z8 D
    copy_from_user(&DXR_data,buf,len);
: Z- f0 S- {+ a* q    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       * ]1 y) W) V/ u
    return 0;
2 x5 E( c* F5 L) [9 C9 V; B- U
, U* n* _( G% I* E}8 D4 E' p2 f7 p" P
4 H- J2 ]. ^# n; ~
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)# ^5 j: `% h; K- E, h( u# T5 k
{ & m5 [) ~" O4 J4 ?% `  d7 K
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));. e* s, R* F, V( J  a
   copy_to_user(buf,&DRR_data,len); % L4 I# d3 Y/ r
   return 0;
  o* W( o4 n% v}
3 f9 S. i! x0 l. Y. T3 r' `- r
$ l  d# N3 Q9 Q/ P+ u$ k2 J* `( r1 c
static struct  file_operations mcbsp_fops=
' f6 w5 `% ^) E, j$ f3 M{3 e. @8 `. F& J" `* A5 v9 k
   .owner=THIS_MODULE,. a8 j. v5 b4 B5 M# C- z
   .open=mcbsp_open,
  Z$ z" `) X* h" |9 o3 g3 d   .release=mcbsp_release,
2 F" w! _; T# b/ V: y5 h   .write=mcbsp_write,
% ]' {4 i" F7 R) L: M+ i   .read=mcbsp_read,
! m% }0 b( h- C  N  k4 s; n};
- M6 @/ @+ V0 s# E- astatic int __init MCBSP_init(void)
% a9 R0 h! y& L5 D8 ?- `{
- a, ^5 m' D% g9 @1 b   int ret;; [0 r' O( J5 `2 j) V) D: f& {  A: O5 u
   unsigned  int   PINMUX1_REG_old;
/ h/ Y7 M+ r/ g* J1 I: M   unsigned  int   PINMUX18_REG_old;
4 j7 [( ^4 K# u9 R! p; P; v/ ?   unsigned  int   PINMUX19_REG_old;
/ R4 C: a7 m/ u# m, }: t2 `! O* s   unsigned  int   temp;  
2 {* U$ u7 ~1 n  k  ?1 r, V   if(MCBSP_MAJOR)9 _+ v$ w# {, y! }4 v( b7 \8 A6 |8 m/ U
   {
; l4 ?/ K6 q) X; U! b9 {9 d5 t% n      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);- c+ V9 g! D2 J- A' G) w2 H! J
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
0 Z; u) O1 q; P9 Q1 Y   }
! p  k( y: q7 K% n* Y6 p   else) \- h. ?0 F# Z  i: X. O$ M
   {
2 o' L: z/ P4 R5 s  d      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);$ i# z% \1 |# R
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
) D1 t$ Z3 i" E   }
9 _: K' V2 Q2 }   
' M# t/ v, Q* }) d5 T6 G. V   if(ret<0)
* e' a9 H& w+ K' \( T: H) D   {
4 K% e& a* @% D9 a      printk(KERN_ERR "register chrdev fail!");" D# L3 n/ x9 [( ~! }
      return -1;
% s6 g$ ]6 Q3 u- w   }
$ ]4 P. ~" R" i) s   
$ ~9 w: d5 W, k  E) X! ^' U" A2 F   mcbsp_cdev=cdev_alloc();
; j* q- R1 D7 V4 r" J& h: a   
) ]6 a6 W4 f+ t4 u   if(mcbsp_cdev!=NULL)
4 O% Q5 o3 C" `' X) U8 C( P8 g  Y2 E: p   {
. T3 [6 T. I& N. ]      cdev_init(mcbsp_cdev,&mcbsp_fops);
* n* W) d; o4 z4 T. W7 k      mcbsp_cdev->ops=&mcbsp_fops;, o' O( K% Y, ]+ U* O4 o$ p+ |0 Q
      mcbsp_cdev->owner=THIS_MODULE;
! k; y6 b3 n' ]: K  u      + j( H3 L3 s9 j8 j5 g
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
: j4 `" O3 l* Q, H5 Q% W- t! z          printk(KERN_ERR "register cdev fail!");9 U! q3 t3 p% f$ J
      else7 p. Q6 R- {. c$ d( I5 e0 D2 N1 k
          printk(KERN_ERR "register success!\n");* ]* K/ E# B  q8 D0 e6 d7 J5 g
   }# f5 l$ s& S: O3 l* \
   else/ C. t/ f& h' `+ D* A
   {- P4 c8 U8 |0 `
      printk(KERN_ERR "register cdev err!");1 L% Z  G& K; y- Z) M* {8 F
      return -1;2 J  r9 a3 O& Q2 v$ v- @
   }
/ L. x% \; Z, b% J   
' x' O9 n1 i+ y' P. q* [7 f% z0 w4 D  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
% M' [6 ~5 e$ W7 ~. `   if(IS_ERR(mcbsp_class))- o  b0 h: T; A# O/ L
   {
2 T# z$ q- d! h  k      printk(KERN_ERR "register class err!");. D+ X, R$ L1 u; r+ q! S
   return -1;% m. w1 [( J" n: g( i
   }4 t2 ?3 E+ k7 @3 o
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);5 ~8 p3 H( H+ o, Y: l
- L* C1 A* n) [$ ^6 @# l! f
   //PSC' ?6 x$ ]( s, X8 I
   //add Enable MCBSP3 P$ p  m6 x, ]) t8 g0 e9 u
   //test
# M- h3 y$ j3 e# H9 n   temp = 0x80000003;$ k* g0 b6 }8 J
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));; m9 V9 Y5 a) G
   temp = 0x00000003;0 Z  ^6 G+ G  o5 M  S+ X; |
   writel(temp, IO_ADDRESS(PTCMD_ADDR));& {1 ?( z, w' r: c7 x; k$ l9 k4 @
% t! `4 v/ U2 E
   temp = 0x001FF201;
& D. c6 w% e! S* s8 Z  X   writel(temp, IO_ADDRESS(PDCTL1_ADDR));$ V+ W1 y. H+ {. n! `8 {
   
* N; w% p8 y$ c" t* L8 G0 E4 _5 G   //PINMUX  
: @0 D# O9 N& K) ]) i: P* N   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
9 \2 s( T6 r4 {; Q7 I   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  2 w" S6 y# `/ l: N( b* `6 |' p
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   / V: d4 `% j, k3 [( A+ C
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
2 ~. C( X2 B; m9 e   8 p: ^& ^* y$ p3 P( K5 c- T
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
' ?& X' d" |* n& u  |& C" Y+ j   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  5 ?6 r; d5 L! h* i: s  K9 f# r
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   % P6 q) R. P" U/ y8 ^
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);) C& @/ m4 l3 P( P

( _; n: k) \# S9 t* k   //RESETn,L138_SHK2% d3 Y- d: t5 j
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
8 F+ Y9 L$ L* B3 y+ l" r   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   2 B& Z0 z/ x6 U  V6 O/ O
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);/ @/ V- X5 r; _! J: Z$ b- R
, A6 b7 X  R% u7 |& k0 E
6 c+ p3 x( z, x' o& _+ z) i, n( i
  //SPCR Register
5 ~) p) b# V$ u! @  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
. a4 O$ A2 N# v1 H8 y% \  temp = 0x03000000;//(DLB=0)
0 {2 B" g6 _. x$ h: g // temp = 0x03008000;//(DLB=1)
- p6 ?/ a* y; A) l9 C6 M% f% }  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset0 W* m$ k3 o4 _# R$ s4 B7 U
  temp = readl(IO_ADDRESS(SPCR_ADDR));
8 x. I- B; y9 i. L2 [$ m  printk("temp=%x\n",temp);+ I" T6 W$ w6 @" l* L

4 }  [! q4 H4 n! o( |1 L   //PCR Register1 X% }6 Z- I" `! e; V" U' V
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0( a7 {3 Y- y: ^
  // temp = 0x00000F0F;  v0 d, x0 I7 |" `" z
  temp = 0x00000B0F;
, d: q: \/ Q$ C% F  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
  |1 M) ~0 l3 p* a7 H: O. G  x  temp = readl(IO_ADDRESS(PCR_ADDR));# d) y, Z( j( K1 G
  printk("temp=%x\n",temp);  
' K# g) d; S- b% o) G3 ^% ~   //SRGR Register
' X% m# d% u$ ^. O0 Z  X   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
0 z2 e$ O1 B: a9 _' i! | //temp = 0x301F000B;
3 s4 a* g7 f# Y" b5 j   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
. Q+ Z# e# X- n$ V3 a  _  temp = readl(IO_ADDRESS(SRGR_ADDR));
7 X; M) o' _) o# S& `" i  printk("temp=%x\n",temp);
$ I! e( R6 P( I% [; `, Z9 J   //RCR
) ]+ [! b$ a; ]   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
" a% [, ~$ j0 C& {3 f   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0$ L6 {7 w& r$ b) t
   temp = 0x00440040;
8 N8 R) |1 G% d/ {   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
% H3 G! ?+ r7 q/ b! W/ ~   temp = readl(IO_ADDRESS(RCR_ADDR));
! i: b" M$ N0 _5 y   printk("temp=%x\n",temp);
/ |+ A: L9 |8 ^5 k+ U* ]- [   //XCR
% E: A' c- b/ E/ M) p6 ?   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
0 s% k  u/ d' ^* Q7 O/ V7 Z   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0  r) w) R9 C" Y, t2 D& m
   temp = 0x00440040;3 F6 I/ B: r2 j% ^* z9 f
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   ' g" X& t/ G) u- Q) r& [
   temp = readl(IO_ADDRESS(XCR_ADDR));
: z8 a5 ?# X, i   printk("temp=%x\n",temp);
- C! M/ D$ c+ S6 c. W  udelay(100);
/ F8 X2 G9 W. L3 l7 j6 f: h  //SPCR Register8 P5 x# M- L& ~( k* H
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-15 C0 Q- E( O6 C$ M" k" r8 c
  temp = 0x03C10001;   //DLB = 0 VS DLB = 14 A3 \# A: M: O. c& Y& F" |) s
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
+ i0 z& F0 n* M4 U/ W6 z% o  B  temp = readl(IO_ADDRESS(SPCR_ADDR));+ F# K! a( a6 Z  p7 L4 ~
  printk("temp=%x\n",temp);
! K' g0 _/ A: D+ Z3 S# |  udelay(100);
0 j/ W6 ~5 S1 X9 l( i
! P8 s4 V7 Z: {. {3 G  //set GPIO direction
  w2 u/ ?) g/ @4 H# Y1 b& ~0 Y   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
% S6 [- |1 F5 _$ V7 l/ e. i1 W   temp = temp | 0x00000100;//EPR----input, I7 Z- E! W( x
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
; e* A/ f* S3 d' F; j7 F7 Z   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 0 B; V0 `6 S! N9 ?! h: ^- F9 ~

. C4 [$ @1 M4 i/ _0 `   return 0;. a  `" a* l' k5 _# Y$ A
}$ `+ O6 b( O# W* H
static void __exit MCBSP_exit(void)7 ]: n+ d. Y% Y3 N- ~
{
, D6 [! H5 v2 N/ U8 G8 {   printk("mcbsp chrdev exit!\n");* P4 J+ {1 q/ o0 t) Y; K
   cdev_del(mcbsp_cdev);  J" U: z6 Q9 v) Z8 S/ W- g
   unregister_chrdev_region(mcbsp_dev,count);
9 c0 t) n# _. r; N   device_destroy(mcbsp_class,mcbsp_dev);
. K/ {7 u6 A, ~& M1 H/ h7 f* Q   class_destroy(mcbsp_class);
- |( d  l! m; A: ?}" r$ a4 o7 d+ R% b
module_init(MCBSP_init);
  q' {# t) r" ~module_exit(MCBSP_exit);
* X) T  L1 p) m1 G( `: g
9 [) @* B0 H8 {% N- d, |' AMODULE_LICENSE("GPL");6 r2 V$ w6 b9 R8 [% r

; N# q- r: i) S+ K4 z1 M) ]我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。# I- [# i" V( L: ?0 v4 b& S
我的应用层的测试程序如下
( d3 W/ r+ n1 L% J/ s, r#include <stdio.h>' C/ Q# H4 a# j- ]
#include <string.h>
9 K1 s# X- Z8 _4 Z; ^8 P" l#include <fcntl.h>
$ f7 d( R7 `5 T+ B" O; Y, S! F#include <unistd.h>2 |& _8 L, k) c6 s5 o/ Y
#include <signal.h>
4 r* J4 m5 q7 [: P#include <pthread.h>       //线程) i+ F  h" {4 R! Z4 z9 `
#include <stdlib.h>
7 A) g; D3 m- r& R1 @#include <pcap.h>          //捕获网口数据* s- R0 O$ Z5 o' N, d7 _
#include <semaphore.h>     //信号
- l7 g/ E# V1 N/ O! }6 t( |' V2 P#include <sys/types.h>     //消息对列1 Y* w5 B& v- ?+ o, Q
#include <sys/ipc.h>       //消息队列
, W' ]& Y1 I! y#include <sys/msg.h>       //消息队列
5 Q1 V+ ~9 M( U2 o9 H) }! u, j#include <sys/select.h>
8 ], }; W/ E2 C9 F) o#include <sys/syscall.h>
2 v6 a, W7 d, _9 b#include <sys/stat.h>2 J3 @0 q/ w3 w# b( i( i
#include <sys/mman.h>. ?- J( |4 k/ F, O; J( X" z0 H
#define msleep(x) usleep(1000*x). Y7 _6 z' |% A

0 d6 q7 }" n0 U' qint main()
1 Y' W1 ?5 F$ f  r* `  ^{
2 \4 x! g  D) [# r% A8 e  H2 N    //MCBSP,ARM与AMBE2000交互设备
! h  ]1 j& {7 p1 O% b- { int fd;, x( B0 b9 b* _" G4 M# h7 {! s
unsigned short data_write = 0x5555;
- T' z1 s: ?% p2 X# ] unsigned short data_read = 0x00;
+ g4 k$ R7 j' y+ q  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
; W4 Z3 S5 Z! ] //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);$ ?  ]2 ^2 d2 f/ T& d: a' \" f
   
2 @0 r% V9 O. N/ t* z  if(fd < 0). z, L1 C. v5 y2 @
  {8 `6 w( h" u1 d5 y- c' ]  H
     perror("open failed\n");
" R- R8 C0 v2 z# N+ e     return -1;( @0 o/ F. P6 b( _
  }, r) E4 w, X- q; e! ]# x
  
6 k4 m4 C( L% P2 r+ L  while(1)+ N& X4 v# v3 G" S& x6 w
  {! E3 O8 _8 t0 z+ @$ N! l! w
   
/ ^3 ]# H5 S9 _; W9 |, h, @   //AMBE2000每次读写是24个字为一帧" F; e( |8 e* }9 g  _
   //写数据时将数据在底层存储起来,等到中断的时候再发送4 c- c# A, _- B! D( j. H% T+ L- [
   //AMBE2000输入数据是以0x13EC开头的4 A- W0 J; F$ j" g) m* w
   write(fd,&data_write,sizeof(unsigned short));
, V" f+ o$ \4 Q8 p5 L# Z# {   6 G( O, z9 |8 ?5 n5 |/ ?& K$ M
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
) X- U. E9 v! _  m) ^0 A   read(fd,&data_read,sizeof(unsigned short));
4 ~8 {* J8 H( U! Q4 y) x) ^8 O0 r   ! l% e# l( r% F7 V3 [
   if(data_read == 0x13Ec)- G# A* v) b8 G
   {$ H$ N% J2 i. z1 w/ v
   
* Z+ n" a3 Q3 U2 d6 ~# z, w    printf("data_read = %x\n",data_read);
5 D0 x) Z& m. R3 H$ E. ~! |, a   }
- P3 Y7 z" I5 f9 F% i5 g2 b. V   0 \) }" y8 l6 T7 _. j
   msleep(10);3 M" f9 l3 a* h# X
  0 X" m  X5 `0 K3 ]: {
  /*
$ m8 o, k& q  n0 d0 y   ioctl(fd,1);   
; O3 J+ e$ ]. {3 } sleep(1);8 d% R) \: E3 t1 c
ioctl(fd,0);2 L! x; Z$ H& d5 Z$ z  {
sleep(1);( W$ d; A( y1 \
*/ 7 S4 M* S, t7 ~9 W
  }   / D, [. P  x( {/ I0 C: s
return 0;
: p; l* f. s: ~$ T
) _' U2 |8 k5 P. D" J8 s0 B}
! I: |7 q! h$ W: v0 I& E+ m( a" I$ U# c
多谢各位指教,谢谢! 急! r5 G  D; J$ }, y3 F8 K% ]7 H& h/ K6 v
6 N; p" G( F+ e. ]: ]
, ~" _  D& ~2 d' {& N, C1 S3 I; Y

  ]! Y/ `# P* E9 r3 h, g) Q" m! f. K  ~

# [9 g. t7 C. `! I: ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-1 02:35 , Processed in 0.047398 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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