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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: . M" M! c8 u, A. `/ B2 M$ q* X
/*
: h" \- |1 N0 B" P% x& a4 A; h * Copyright (C) 2009 Texas Instruments Inc% p. a/ r4 [  ~6 D$ p
*
; F! l8 h; ~/ I( F1 P * This program is free software; you can redistribute it and/or modify6 T  i  Z- |& z- u
* it under the terms of the GNU General Public License as published by
/ y5 ^/ X" r: s1 _2 y' s * the Free Software Foundation; either version 2 of the License, or
1 ?% o  @" I; n, N * (at your option)any later version.' X. d5 o2 p4 y1 [+ ]5 P
*5 j8 d0 U" u) X7 M" i
* This program is distributed in the hope that it will be useful,
/ q& l; s& T+ k * but WITHOUT ANY WARRANTY; without even the implied warranty of
/ W- Q; F/ ]4 a4 J( @7 J * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 t) L* d4 P2 V7 Y" @8 i% C- n
* GNU General Public License for more details.  O& w# d& _! B  n' E; m) `0 z
*
4 x' N+ h/ r3 \* f# E! q3 V * You should have received a copy of the GNU General Public License. ^8 q- g) T3 c
* along with this program; if not, write to the Free Software
0 N3 ?% p; h7 ] * Foundati
9 @& r6 i/ q( e" K. H  J*/
! J+ M8 g! V) @#include <linux/module.h>6 r) j3 T8 [) P! F( b
#include <linux/init.h>
/ D  Y1 C3 k6 o/ A#include <linux/errno.h>
: S2 A0 ]& R8 V  i6 r/ q( n#include <linux/types.h># K2 _7 P# R/ i9 A* a3 W
#include <linux/interrupt.h>
3 V: j. x& B. u  z; _#include <linux/io.h>4 ?& U/ b0 [+ t# g' K! u) q
#include <linux/sysctl.h>
9 `% @% a% @2 o5 i& `#include <linux/mm.h>
- F" A0 ?# {7 g8 D#include <linux/delay.h>
+ z, L. _, b0 n( Q" w#include<linux/kernel.h>9 E2 G. J3 U; J% \7 s
#include<linux/fs.h>2 A1 l2 R9 s: l+ Y: x/ S
#include<linux/ioctl.h>5 H  ?# K( s$ n* L/ d
#include<linux/cdev.h>$ z  J4 U/ W! ?  o, n/ M. b9 a6 V3 B
#include<linux/kdev_t.h>. w0 `0 C, a8 X, O( M9 G3 @
#include<linux/gpio.h>  J7 e0 ^# o  e0 p0 z
#include <mach/hardware.h>
7 X4 s+ p# Z' B# {#include <mach/irqs.h>
8 O; d. c8 `* S) v9 K* N5 P6 Z) R* C, b) c3 c$ @
#include <asm/mach-types.h>
% _& M& ?9 Q6 n4 M; `7 \4 n#include <asm/mach/arch.h>" ~  D- S9 ~3 S, L! l$ b
#include <mach/da8xx.h>4 a) }4 c' \5 [6 z$ X
#define  SYSCFG_BASE   0x01c140007 g  K: B$ Z) W4 q0 h
#define  PINMUX1_OFFSET   0x124 7 W6 S9 y9 C9 x6 {* B3 m
#define  PINMUX18_OFFSET  0x168 ! W/ ~  N9 w( n: o% w
#define  PINMUX19_OFFSET  0x16c( E" F- _+ Q% z; ?
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR5 ~) E( g6 C& g4 J
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR6 r! Z: I* \  a, J: C( S
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR6 \- E5 _5 t0 F4 ~
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
0 d$ P- A' Y8 y0 G/ B#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR7 C; H% D" f3 h4 m8 T7 |, F7 E
                            1 ?& I' n: F( f1 S
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR0 y! U) \/ h$ I: g5 J! P
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR# k* j$ C3 [1 t  [" B: f
//PSC7 m! F8 j$ _# k" w  \
#define  PTCMD_ADDR   0x01E27120  
" j# ^  k! J* X. C#define  MDCTL15_ADDR 0x01E27A3C
$ w9 s) k( O4 y% H) x* x( o#define  PDCTL1_ADDR  0x01E27304
, f+ I7 z6 D6 Z( `//GPIO8 direction/ S( ]8 |# {) z9 N& D8 _# X, r
#define GPIO8_DIRECT  0x01E260B0" ?( k( y1 P+ \; R9 ^
#define GPIO8_OUT     0x01E260B4; l; j0 b) O: p- \; U
#define GPIO8_IN     0x01E260C0* c2 x) W: m4 s( h, U

/ v) b4 `4 S$ l9 S8 r* J//#define MCBSP1_RINT    99              7 j" t! t0 L( n' ]% k8 c
//#define MCBSP1_XINT    100  
9 {2 k) [: [0 c# r$ M# ystatic int MCBSP_MAJOR=239;
' F. H5 d! T% cstatic int MCBSP_MINOR=0;! W1 Z6 Z3 k) }
static int count =1;. T% ?  ], F8 i: e7 @1 D
- I4 I" Y/ F5 P% o% m1 L
#define MCBSP_NAME  "MCBSP-device"
# _9 d$ H3 D* h- i
! _% T- H2 H# {, |3 R+ _static struct cdev *mcbsp_cdev;% W3 g' [7 U, L' u8 n: O( @2 b
static struct class *mcbsp_class;
% E3 l+ ~  l: G9 k/ Cstatic dev_t mcbsp_dev;
( [0 x) z/ w4 O( Bunsigned int DRR_data;
1 w0 R: y( S$ ^% munsigned int DXR_data;% c! {" `" Q+ {
static int mcbsp_open(struct inode *inode,struct file *file)  X: b5 p1 I, Y5 s* u1 A& s
{  m% r7 K4 ^% f" f
   
1 Z( h2 m5 _4 k; @# x) `0 c, s   //interrupt enable,initialized
$ [( j( p6 c( T, p  w2 `   unsigned int temp;% [6 `/ x2 b* @4 ^3 @
   //SLEEP_EN(GPIO8[10])---0
8 K) Y9 J) _0 b( O! d9 G6 X   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));' `! H2 V$ ~, v' l
   temp=temp&(~0x00000400);* ]  a  v+ I. Z
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]1 X2 O, ~  ]/ a8 g- `) V
  //RESETn(GPIO8[8])----0----1
7 X: T) Z% ?0 r+ L. O# ?   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));* F" e% Q7 H# P8 w/ k
   temp=temp&(~0x00000100);
4 v; J- W1 V% a8 u, b   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0$ B( c) l9 ?; {- H! Q
   udelay(100);: S! H# j  C( ]1 \7 P
   temp=temp| 0x00000100;# B8 y. w+ Y( Z* n0 }( T
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
. r% C( y- n; i   udelay(100);) Y+ @2 B" z1 {2 M5 w: x( j$ x. K
   printk("open success!\n");5 m$ A) a6 @: W7 e, n# E0 Z$ n
   return 0;
) g# ?/ E+ E: Q7 z. Q}0 g/ \$ B; `! {- i8 ]

8 R: m. ^- E8 W  E1 b: H/ h5 f' k6 Q) ~static int mcbsp_release(struct inode *inode,struct file *file)
( v! ^- K: ]3 Q{. |* \; ]& J  K* U# P
   printk("release success!\n");# ~+ q9 h  ]9 e6 G# v
   return 0;
) y) o3 k; D( B9 c4 c, [# Q7 u}
. ~9 Y& X, z+ A+ k' s( g2 v$ n& U" C; E4 A1 z8 @& Y, [
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)4 h+ _% O  }- d. ?$ J! T0 `) m
{' H& @1 ]5 n5 s" K8 X" e6 o
    copy_from_user(&DXR_data,buf,len);
7 o0 P7 W& M$ K$ h    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
' x% m7 R; W6 z7 T' @) f    return 0;
4 j0 M  |4 ]  ^5 d6 ^1 o. X  Z
0 M3 C: ]6 Y$ m; ~: G: b% _}
2 V- c& d' p$ `4 |; ?. Z/ g. l4 a
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)% |. W9 A  N, l1 Y1 C; [  r+ j$ \
{ " U- t8 R9 B2 \0 T* J1 K, S. I6 M
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
* {  _& V! J# K" U* e8 k) G   copy_to_user(buf,&DRR_data,len);   x( N; v% X  o2 J; g  Z
   return 0;* x# C9 n7 U. I/ n. R; ^
}
* Z- r0 `+ R, b5 k& e4 k/ [9 |% g: l9 @
; ~8 F$ J7 p' N2 }% K8 b& A0 X
static struct  file_operations mcbsp_fops=
: X5 X) R& ^# H* G6 I{
4 K; y  N# p' Q0 l  t   .owner=THIS_MODULE,
8 ]. ^* c% N/ b. K9 v  j% M   .open=mcbsp_open,* ]* {* O. Z) q" |
   .release=mcbsp_release,
1 k- y& ^5 y( y$ N2 X   .write=mcbsp_write,; R- ?) b% d7 m# q
   .read=mcbsp_read,# I9 w+ W8 c$ V; T
};5 _% K" l5 D" J8 Z, Z, g& L/ j
static int __init MCBSP_init(void)
/ ?$ L# q, s9 r8 N5 M* B$ g{
# W/ @  \0 k+ b3 Q1 ]   int ret;
; Z! b4 W# V! [$ d' ?5 j+ o2 R   unsigned  int   PINMUX1_REG_old;$ l1 M% W6 ?% J- T) l5 q/ \5 l
   unsigned  int   PINMUX18_REG_old;' G6 j. T. _3 r" u0 ?. Z/ f
   unsigned  int   PINMUX19_REG_old;
! _) M4 _& F/ O5 n0 Y' E' F" }( ?   unsigned  int   temp;  9 e6 ]7 T; ^% a: k: j4 \2 P+ D
   if(MCBSP_MAJOR)* b; {- m3 D! P9 x
   {% d' P: [- H$ y5 e
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);: m  n  n- P- x) E' D
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);( X4 E1 g* M" ?4 c  O/ Q
   }
# G) j6 `0 C! c7 X   else- x5 v, {* g7 S2 c2 m  k
   {  h' w& s7 g* o6 V2 e5 g, \* D7 ^
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);/ X1 ]1 r0 _! _% r+ b
      MCBSP_MAJOR=MAJOR(mcbsp_dev);+ I8 ?8 p1 r7 h/ z2 i, S" S
   }+ ]. `6 `2 }% v! o! u% g3 G
   & ?0 O5 P, Q, n4 j
   if(ret<0)) B# {8 r2 t( u% p5 N
   {
0 r- s' |( j" S( I& @      printk(KERN_ERR "register chrdev fail!");. w2 G* S: H. Z+ o/ B
      return -1;
' Z! g$ H9 \$ o  j1 ]   }& a3 X/ g3 ^2 r' Y
   
# j" h" g6 }& E! w   mcbsp_cdev=cdev_alloc();9 g- I+ a! f$ u* Z6 z( z% b( J! ~
   
" u' y4 n3 W' N, ?8 y   if(mcbsp_cdev!=NULL)+ B3 J+ t! v* `
   {8 ^8 }4 V% A) O: H. H' Y
      cdev_init(mcbsp_cdev,&mcbsp_fops);" Q, O5 G$ u2 P' M1 |( B
      mcbsp_cdev->ops=&mcbsp_fops;
# ?/ }. U2 r. C8 i6 y; g4 N      mcbsp_cdev->owner=THIS_MODULE;
3 c* m  A6 n. n0 C      
' D: S5 e' f" p( q- V' M/ J, h+ l      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))& x, U& s( E  G" k2 _
          printk(KERN_ERR "register cdev fail!");
& G) @# I' U" b* p      else7 R' S* Z1 R- N# H4 g
          printk(KERN_ERR "register success!\n");
5 p& Y8 L! ~5 [) P9 y' y1 g   }
9 p" z9 h7 z% T% h   else
% p4 w! W1 j* G/ `' k   {
; ^) ]; W$ ]  C5 L      printk(KERN_ERR "register cdev err!");6 Q( F: B# D8 \1 S
      return -1;
) ]  x& |8 N8 s/ I# O: Q   }1 B/ C' u8 h- H1 H  t
   
4 X5 g! b3 X2 T0 K8 h6 W! H  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);% t1 q4 ~; H3 c, l1 O! S8 I
   if(IS_ERR(mcbsp_class))
# z6 g8 S9 G. x: g8 `& F5 H   {: T1 i. ^1 L% |4 o& k  E3 X3 t# J. w
      printk(KERN_ERR "register class err!");/ ?9 h( X' A; |& E
   return -1;
* m  A% P8 ^8 A0 {   }% {) P. _: i9 x
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
$ N$ E1 ]7 ^! A6 ]+ y8 L4 A+ s
6 O$ S' u% z0 u% `" r. x   //PSC7 ^! z3 i7 ]1 l5 U/ a. i7 c+ q) l6 F
   //add Enable MCBSP8 I% z. O) @+ B4 _
   //test
7 k: x) N' v5 H: {; w   temp = 0x80000003;* E- ^. `8 l2 k  p9 w, I- G
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
' C7 K: c5 C: D! x1 P   temp = 0x00000003;
8 m/ a) u3 n8 ~  P8 W   writel(temp, IO_ADDRESS(PTCMD_ADDR));
. Y% d5 z  {/ l 5 E! K1 ]% c8 o, I) w, f
   temp = 0x001FF201;4 V& Y' n" c- q5 p- {# ~3 w
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));, s! X* n& H' l( g1 m
   6 p/ i: x8 C* F
   //PINMUX  $ i$ x. _$ \/ W; X
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
: ^" _. u) g1 k4 g1 f   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  . n! @$ b! p/ f2 b5 c7 b  N
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
( `& J, H. O8 {( d7 c/ B! l   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);( D3 O% B) f1 S6 O* {" _
   
5 h0 E4 G# A$ f  C: }% Y. q* \   //SLEEP_EN,EPR,L138_SHK1,L138_RC' `1 w, |  C+ S/ L3 u3 R/ R/ Z, G
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ) C. c" M2 E0 v  t/ `
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
3 P+ k+ ?. \1 B, h: _. ~' G8 Y   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);1 k5 ]% N" d9 G8 G

* ~( H# t# O0 F, s* u" ?0 w   //RESETn,L138_SHK2% t1 k# f5 r' R* @5 `# @0 @) n
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
9 O( z. X' ]. V+ J$ ^   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   " J/ n1 h5 m$ n; h1 s9 n/ m  W: N
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);& d; ]: |* i. ?5 ]' E
6 N1 P  l! g8 l" H' t( J

: Z  p( r2 a/ G# p2 K$ [  //SPCR Register
5 S1 M. h) c6 s  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
5 K  X7 i7 r' M" Y, E  temp = 0x03000000;//(DLB=0)7 D3 s2 p0 h8 D& l
// temp = 0x03008000;//(DLB=1)
# s1 N" J2 e, u' s) w  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
6 k$ e4 {: r% c/ P  temp = readl(IO_ADDRESS(SPCR_ADDR));- S3 ]9 g0 ^: _6 {
  printk("temp=%x\n",temp);# S& U6 l- t3 ~8 l

8 ~$ _. \0 Y, }* L+ s   //PCR Register
% _% A! T# H- ?9 C9 K7 A; j3 Q   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0, h* B9 }- |- n2 {8 H/ C7 F! {
  // temp = 0x00000F0F;
. l  P+ X( `2 M5 s  S# z  temp = 0x00000B0F;
7 l1 G" o) e0 L. F4 y  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ; s/ R: ^! z% u
  temp = readl(IO_ADDRESS(PCR_ADDR));
( @5 {: ?2 Z9 v! h1 s6 W  printk("temp=%x\n",temp);  2 C. ]# `% p: m& m) N
   //SRGR Register
& o. w$ ]0 C9 h, b+ v: A: z   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11: s) o2 ]7 A& |# S# S
//temp = 0x301F000B;
: L/ ~7 S+ d& e   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 0 p6 h; S0 g- x+ a$ S5 u
  temp = readl(IO_ADDRESS(SRGR_ADDR));) L* o8 w' j9 G: Z  H
  printk("temp=%x\n",temp);
1 w. Z7 |% p5 O5 D: E+ k  \   //RCR' @' }; i5 c' y' Q6 E2 G9 ?/ o
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
% a+ r, p3 c  e, [   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0. v9 ~- G2 {9 Y6 R4 x
   temp = 0x00440040;
; `% ^8 }- C+ C# K  ~   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   % v5 `, f* x, `8 m. W# A; @
   temp = readl(IO_ADDRESS(RCR_ADDR));' m9 J* t0 u5 _7 V9 r
   printk("temp=%x\n",temp);$ |" t: b, ~! U2 ?3 V
   //XCR# i! M* I+ Z# X# t0 C/ p" r- @
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
' a* `; l7 u1 C. Y$ w   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
+ l& a' q! z+ T1 F   temp = 0x00440040;
+ R# H9 J4 c. i5 A, }; ?   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   * Q" {+ K$ E/ Y! r" q
   temp = readl(IO_ADDRESS(XCR_ADDR));$ E4 v0 {* v" Y% Y
   printk("temp=%x\n",temp);4 `2 \3 {9 g% l4 K5 j% Y
  udelay(100);
8 z7 |+ p: e. L  I+ c" D4 `  //SPCR Register
6 ]: {8 d1 i( {+ u; Q  Y: c9 D  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
2 \% b0 V& B* c# Y3 A& q/ z5 a% p  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
: P( T7 v; \2 u* a% [  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled, \) u8 V% l: Y
  temp = readl(IO_ADDRESS(SPCR_ADDR));
8 |: Y- x. I9 X# u. e) _& i  printk("temp=%x\n",temp);3 @/ B% Q1 |" u- w0 M; p
  udelay(100);
$ X9 ^6 Q9 `0 p; O
/ q: W4 @3 D4 W2 i7 C8 E# E  //set GPIO direction
! o* H/ A2 l4 a   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
* b! j6 ]2 v% @& c   temp = temp | 0x00000100;//EPR----input
/ X8 b8 ~/ G9 T/ [% `0 w8 ?# E6 j   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output3 u% s( d# u' K* t' q, t- n
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ; G. P$ A! k4 i8 _( j1 d# r+ P% E
% O& k' k4 L: |2 X
   return 0;, s0 x  e  [5 a
}
3 K  ~; a3 S+ t8 C+ Fstatic void __exit MCBSP_exit(void). h6 ~1 C- M  M" S' h& V5 h2 L& @  I
{$ A1 U, B7 H( g' g2 ?
   printk("mcbsp chrdev exit!\n");8 `$ E8 }4 e  k4 X5 C6 k: K: G
   cdev_del(mcbsp_cdev);+ _; ]9 m% E; H: |9 W) m
   unregister_chrdev_region(mcbsp_dev,count);2 B5 Q8 i6 L* c- H$ `) B
   device_destroy(mcbsp_class,mcbsp_dev);0 u1 w5 b- C5 k" F
   class_destroy(mcbsp_class);% r% s5 c4 y1 r) m$ F; W
}
+ U4 @3 i! e4 V2 \; e6 f% ?module_init(MCBSP_init);3 W; Q, E% U! y' P( @- }
module_exit(MCBSP_exit);
2 k: B1 d3 t2 P+ U. e8 i: T6 e  B$ F6 L& a0 b
MODULE_LICENSE("GPL");# v+ g( y1 S) d# X! ^; t
! O3 d0 |3 @( n, L
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。- c. G# X; K/ t$ R- i
我的应用层的测试程序如下0 H8 B1 b1 C0 Y, ^; W0 o
#include <stdio.h>
& }% n- h/ w: O8 h#include <string.h>" J( K! c8 p. R* m. o! C' @
#include <fcntl.h>1 \% c# T+ a* a" J, ]
#include <unistd.h>
7 J- M/ p( R9 K# m! k! t/ q#include <signal.h>6 B4 {" L: a: W' s1 i! y' M/ x' C
#include <pthread.h>       //线程
: B. W' P8 Q5 o#include <stdlib.h>) p. {, W5 ]- K8 @2 }
#include <pcap.h>          //捕获网口数据; q/ ^. G# q7 j7 m- s0 z/ V+ m
#include <semaphore.h>     //信号* ]- w7 e! n* P/ W+ Z& O
#include <sys/types.h>     //消息对列* l2 t# V- W' I; b- P: o! w
#include <sys/ipc.h>       //消息队列
3 C( B" K2 x  |9 B6 \- V#include <sys/msg.h>       //消息队列8 s$ o+ F" x  b* D
#include <sys/select.h>
. C% S& R$ T) B#include <sys/syscall.h>
1 N5 w) s) `% _# ]4 q$ `' Y/ l#include <sys/stat.h>
4 ], y0 d+ ^* h- a4 l#include <sys/mman.h>
, q1 D; W5 V) ^6 S0 b2 Y4 Y; n#define msleep(x) usleep(1000*x)
& {1 H+ i2 ~. O0 _- _; A* d2 g& x) a' G- S* C$ U8 A' R
int main()
2 n6 X# w9 X' P2 z! t/ I3 ~{
1 a1 j5 d- ?3 J3 O0 ^    //MCBSP,ARM与AMBE2000交互设备# j- |/ k5 W* ?; h/ S& T' O6 z
int fd;9 }- N5 ]( t# V/ L
unsigned short data_write = 0x5555;0 I9 y& ~) H2 I
unsigned short data_read = 0x00;& b+ p, v! c, Y4 g7 {) G3 u
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);. A6 c* S' R( n7 `
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);2 j7 ]1 }4 b7 i) Q% P) p' {: }
    + N- g0 J7 x% D: k3 n, ~
  if(fd < 0)' q% p$ z2 n9 m" j, b
  {
7 @5 d6 U& W: J0 w- V( K+ T     perror("open failed\n");
+ M. c  R3 ]  h     return -1;' w: K, s1 V$ E: s
  }
" F. Z4 ]7 L' W* x  4 b% j* v2 c& w, x6 T8 L* J
  while(1)
: T! u! p7 ~7 n3 H7 j; ^  {
' l3 p; H2 g. K; }: G4 ]   8 G' J7 o) X& W, C  B( ]
   //AMBE2000每次读写是24个字为一帧! Y- v) k. a" q# X
   //写数据时将数据在底层存储起来,等到中断的时候再发送, H5 k# ^" x6 j* j9 z
   //AMBE2000输入数据是以0x13EC开头的4 m) k3 z' h; E. w& [3 y& G& j
   write(fd,&data_write,sizeof(unsigned short));$ g! B, h, H7 e! B* _9 y& A2 }6 B) d
   1 h4 S) U3 k5 k. J. b# N2 g
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
- N' O& a8 T  D7 w2 l, t+ @   read(fd,&data_read,sizeof(unsigned short));+ D0 K4 A4 ?: f" I9 g2 r
   % y. B2 c6 W6 d. l7 x$ s
   if(data_read == 0x13Ec)4 L0 M3 F# W# \- B2 f
   {
+ l% l3 p- k( E2 z+ l1 f; i7 y   
$ Q4 v( n8 ~  b: _7 I    printf("data_read = %x\n",data_read);
3 L- t! ~6 T% V   }! A6 P- ~$ U8 j, [# k% v* t
   
9 z0 H( L$ K4 z  B   msleep(10);- q/ I7 P) x5 u9 b4 r
    w0 p# w3 o0 p+ ]
  /*6 E  t' {* e9 E) j/ ]( P; w
   ioctl(fd,1);   6 y* r! F* B" {: [1 G0 C" x  I
sleep(1);$ M1 w6 P. M7 Z" P
ioctl(fd,0);
4 L$ \8 o% Q" b- y6 `$ K sleep(1);
- \6 N1 s) z; q */ 5 B0 K3 T2 K3 ~& c
  }   6 \$ Z4 m  y: G; R( p
return 0;# z* l; ^' W; R4 p! K
7 H+ X% b& O. J3 b! w- Q" y$ {( v
}- O) M6 R0 h; b( {" G

0 l: e6 G5 W& z9 f* U) K  ^+ m多谢各位指教,谢谢! 急  q# a6 R, p  h1 J# R( ^

& ]" p; y0 r% U  ]2 Q: Z/ \! Q" z
$ M5 t: L) U7 E

: O6 D' I) F7 p( p" u
  h, e3 T( ~6 p) b2 K* x9 Z5 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 02:09 , Processed in 0.056217 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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