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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
( @, [0 ?% p3 k" O: p+ n6 X/*: w4 `, P/ y. [# F! B/ |( h
* Copyright (C) 2009 Texas Instruments Inc
0 u+ S1 {+ j6 Y *6 S3 O9 G& o( p9 f8 G/ Q  n
* This program is free software; you can redistribute it and/or modify) I" f4 z" T7 f/ z% M; L
* it under the terms of the GNU General Public License as published by
/ k: l2 x9 \% _0 y, Q * the Free Software Foundation; either version 2 of the License, or* N' t! n2 _- G9 n0 V: Z! ~
* (at your option)any later version.
3 _: v% e' E2 [: Q4 n *0 H# _* d" J+ b" L+ E
* This program is distributed in the hope that it will be useful,9 g# V5 z2 H0 S/ D
* but WITHOUT ANY WARRANTY; without even the implied warranty of5 p9 t/ H3 |) }' c/ Q2 k
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the( z% v' ]$ }7 p( ^' q4 p4 R$ S: |
* GNU General Public License for more details.
3 A+ p  w9 @- }2 I) ?: v5 V# T ** }3 r2 i% r, S  I3 X% l( @
* You should have received a copy of the GNU General Public License
' D+ H3 d) x8 Q% _* D6 @4 F * along with this program; if not, write to the Free Software
/ T6 |7 D* x; N5 Z * Foundati) s, F5 {: Q+ C7 z( b+ T! L
*/" l; W' Y' k. x* R/ i& W, }; C
#include <linux/module.h>
( t/ T6 V4 W! F' F( H5 v& N+ R#include <linux/init.h># H7 z# Y! a/ b- r1 T% k2 ]6 _. o
#include <linux/errno.h>2 j: [) G; B/ x
#include <linux/types.h># k! _( c9 k2 h8 R( O. \0 ]- h
#include <linux/interrupt.h>/ Z+ `% j1 t% T# ~
#include <linux/io.h>; _% f' \' z0 `3 V9 Y
#include <linux/sysctl.h>
* j7 J- K0 n8 M) h0 S; @; ?) b#include <linux/mm.h>2 t5 T8 H  S* v' b5 Y
#include <linux/delay.h>
) H/ q" S; g6 A0 I: _#include<linux/kernel.h>
# d1 U( `% C5 U# \9 G8 c, l#include<linux/fs.h>
8 W/ s6 n9 _4 R* j5 }: a  W' _#include<linux/ioctl.h>
. g2 O8 C8 i+ g. J#include<linux/cdev.h>0 `/ M3 g% k; b, o; E
#include<linux/kdev_t.h>! w& H- z  Y" W& @. ]
#include<linux/gpio.h>2 F2 j6 G+ P' [. i
#include <mach/hardware.h>
2 `" e1 o5 @3 w#include <mach/irqs.h>  J) P" s  Z; U5 l2 _
! j/ X. O2 {! m8 `9 B
#include <asm/mach-types.h>& \/ M: e0 \7 Y5 s! G  T
#include <asm/mach/arch.h>- Z+ @: \# V4 M5 X
#include <mach/da8xx.h>
7 P* K4 z  b5 {' H4 }#define  SYSCFG_BASE   0x01c14000
1 a9 E1 j' p& ]) Q, y#define  PINMUX1_OFFSET   0x124
: _8 b  m: F& {#define  PINMUX18_OFFSET  0x168 : b6 q- W$ r* v$ q
#define  PINMUX19_OFFSET  0x16c" }* _8 j/ @4 t# y% h
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
  q0 V3 E2 P: U#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR: Y0 x4 q7 E$ u% Y7 u1 d! h
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR$ b( U+ x3 ]0 l# @* S' N, i
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR0 S) R- ?3 Q) H, j5 h+ Q6 K# p( q* L7 C
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR, h2 K* W. f' |) M/ R* Y1 S% D* j6 V
                           
, z& R- |# G1 o/ E- `#define DXR_ADDR      0x01D11004  //MCBSP1_DXR, w: b. M8 g% F+ ^1 F7 Q
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR0 H0 f6 O$ J: j- o% ]1 l
//PSC& d% |4 n4 o" h- m2 q! z7 O, Y  T+ o* e
#define  PTCMD_ADDR   0x01E27120  8 n9 x' X2 Y6 p, U8 R: f. F
#define  MDCTL15_ADDR 0x01E27A3C
& p% m! A: b1 e6 q4 O1 r2 N#define  PDCTL1_ADDR  0x01E27304- v1 K) c- [% v' B! s7 A% D
//GPIO8 direction
5 V& B/ Y' t" H8 g2 V. V6 T#define GPIO8_DIRECT  0x01E260B0" W# _  F& D' u7 K1 u0 p
#define GPIO8_OUT     0x01E260B41 F- S& a7 B: f* s
#define GPIO8_IN     0x01E260C0
$ _/ m3 p# O# \8 z3 v" [1 a8 f: B, q3 t, B
//#define MCBSP1_RINT    99              7 w) c" W. v% _" t  V
//#define MCBSP1_XINT    100  
0 j1 |5 G3 _8 bstatic int MCBSP_MAJOR=239;
2 v2 q1 S, j0 R5 wstatic int MCBSP_MINOR=0;
/ q. w% x8 i+ X) cstatic int count =1;
2 b! T% k, {7 y: _8 h  T( z7 R# b8 ^5 G4 F) P6 b
#define MCBSP_NAME  "MCBSP-device"2 _! i, S) m8 x
$ W( l+ O, f# J4 h, A% f+ c% X
static struct cdev *mcbsp_cdev;
! ?: r$ c7 t: Y4 fstatic struct class *mcbsp_class;. \4 F) t; g1 f1 h6 Z0 F2 S
static dev_t mcbsp_dev;& [+ O7 x6 w& |! j) p2 Q; n$ c
unsigned int DRR_data;% r! Z+ `2 E7 x9 S
unsigned int DXR_data;
  Z* j! A: [5 V* {* ostatic int mcbsp_open(struct inode *inode,struct file *file)
( c( c. n8 ]* N- U% Q% u, p{
: N& G6 Q( w' N0 T3 ~4 c2 x0 W5 V7 D/ O) _   
: a) A  t- ?$ _1 \0 @+ N) c   //interrupt enable,initialized
1 M2 \: D! V, V3 F( M" {3 X! L   unsigned int temp;
( N( J4 t8 \2 U( P   //SLEEP_EN(GPIO8[10])---0
! J( I: @. P2 w& I& Q   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));9 J1 `% o3 d- b6 \
   temp=temp&(~0x00000400);
" A" _: s3 \0 |3 @( l0 c   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
( f" @: h$ N6 V9 [; t  //RESETn(GPIO8[8])----0----1
' [- g4 O% P. T% E   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 m, o% m2 {' M4 ]7 E
   temp=temp&(~0x00000100);
3 ^1 o: D& ?6 ^1 k2 V; Q6 W   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
0 e) @) n* E" z  i" o   udelay(100);
2 p' @- n- ~  ]0 |5 ^: Q7 J   temp=temp| 0x00000100;
  G/ Q  R8 U8 R$ r, }1 c6 d4 i   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1. J; w" s' P, K% T( N, m: j# W
   udelay(100);" _) j, M; D* g/ n3 g$ t+ \3 C) H
   printk("open success!\n");
8 F1 m# F, C( ?' u7 D   return 0;7 [, K" U% i$ @8 m; G4 J
}0 p, z: a* m2 R! e; z3 @6 R
) M& Z: m, O7 ?3 o* f
static int mcbsp_release(struct inode *inode,struct file *file)' R* J+ m$ e) W  U
{$ O( h3 L* r5 s* w, k
   printk("release success!\n");% }5 l* L9 F; U& H) b% N$ T
   return 0;, t* ~2 ^: d3 a- c4 V
}
& l# e2 ]* R) m1 X' h
$ ^; h% f' `' C& i  n' w9 |6 Lstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
, J3 U9 q7 t; u2 C{
4 y, h( O7 w2 h$ |! W7 A    copy_from_user(&DXR_data,buf,len);
$ q/ ^9 R6 ^6 k* C$ }# U    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
0 B  z/ d. X' O8 a" z% S0 d    return 0;$ z: [2 y# b8 K
4 f! R: ]0 N5 l% k2 E* n
}
7 O, n  [+ f; e1 I4 m: u9 U, d. H  e  D$ l! k0 `/ w  w$ i' ]
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)! D, j* F4 a# k
{ 6 q, d) l; G" W; i
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));2 O7 \8 q' Q, p0 w; ]
   copy_to_user(buf,&DRR_data,len); - }; t. _* V/ F  H( ]# w
   return 0;- l  R0 W4 v  o) q* M* R
}0 S* S) i+ w! @. E; j: R0 M) N
& F5 y: _% U9 O

  ]  T) C3 `& J/ Ostatic struct  file_operations mcbsp_fops=) N* `# t# b. c) s) L, Y& ]' t
{' x5 h- J" F/ l. Z  ?! I* e
   .owner=THIS_MODULE,. o1 o/ }3 v2 ^% l2 J3 Z$ m
   .open=mcbsp_open,
+ P3 q" b! z& _- x+ a7 }9 _0 f   .release=mcbsp_release,8 d7 j% X( _4 y2 R
   .write=mcbsp_write,9 l5 ^# Q* G0 f6 M7 ~
   .read=mcbsp_read,
" c) I: t6 u" |" j3 D) U7 F};) z( v1 U4 z5 _3 ]# H0 ?& |
static int __init MCBSP_init(void)8 X0 n" g: E4 ]  v; z( [
{
3 I# l, |+ E, A9 |   int ret;. e# L; c. X6 m) l  A. L/ ^3 |2 r
   unsigned  int   PINMUX1_REG_old;
# r  T0 U4 m- ^5 {   unsigned  int   PINMUX18_REG_old;1 e; \% C( v1 O6 T1 ^0 N+ w
   unsigned  int   PINMUX19_REG_old;
4 }* V8 b- g$ h8 E0 V% J8 `1 m* O   unsigned  int   temp;  0 V8 d) \" v! {$ Y% p
   if(MCBSP_MAJOR)
* a8 b- X0 U. `1 Q   {0 u$ W* j" L5 b" b
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
0 M7 p. `# V/ A4 k0 Q      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
$ O3 w/ r' [# V- I9 p, t: F( c7 l   }
* h3 b" v" d7 c  n1 p3 I   else( o( m- h# j- P9 D7 C
   {
7 w( g4 f; M0 J9 \7 b- I4 H      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
. p6 f  L( w3 K      MCBSP_MAJOR=MAJOR(mcbsp_dev);
7 z; ^# x  L6 D2 {   }
9 r. h* e( K' l" [1 S   
: S# D( ~1 C' t' m* b   if(ret<0)1 Q/ {4 r8 x/ R; y5 d5 ?
   {
* S0 I3 i( S, J* e( E% u      printk(KERN_ERR "register chrdev fail!");
3 V: Y: f* R. F" Q- R4 n      return -1;
, j. E5 {  |$ K7 `3 g- n   }
% X+ h# u# R: v   # v, H0 R0 e& t* I+ d7 f: |/ V
   mcbsp_cdev=cdev_alloc();
& h. g, |. }% R. r% c1 n   " r" }7 S" O( j0 G
   if(mcbsp_cdev!=NULL)% I  k# o# F8 L: d# h6 T& Z
   {
' q0 F8 m# n0 o8 c& S: O$ J* t      cdev_init(mcbsp_cdev,&mcbsp_fops);
$ ?( W" F7 `& Y$ j$ t      mcbsp_cdev->ops=&mcbsp_fops;
0 U# e% R* e( Y8 }+ Y$ @      mcbsp_cdev->owner=THIS_MODULE;4 a! I. k9 {5 W. M$ F
      9 Q$ \3 O, l+ U; K7 K$ G4 `
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))% _; l. U9 B" p7 {# T, u  T6 z* }
          printk(KERN_ERR "register cdev fail!");6 z$ S8 O$ w- `+ N5 c! a
      else3 X# I* s; x" W8 T9 `3 ]
          printk(KERN_ERR "register success!\n");' r* A; N& W& I3 \, [
   }
  [8 c% b0 h: k) T   else
* i1 V7 C" O# g7 D9 x2 c   {
( w8 R% `6 N/ Y( e; F9 g: X      printk(KERN_ERR "register cdev err!");
6 ^* }7 z- }" r0 y! G      return -1;
0 h9 x0 |; E! l7 M9 J; `: P   }
% ~/ I3 f8 \4 p   
( ^  ~1 x4 ^! R5 v4 m: ~  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
% i/ @* z6 @$ D4 Z7 S   if(IS_ERR(mcbsp_class))
/ R. K$ W; O( `* |! V2 X   {  h) }1 b+ u6 [" q% w* |
      printk(KERN_ERR "register class err!");! I8 \: E  J* A5 }
   return -1;
$ ~% C- B) L5 X: j) }, n9 L   }5 V5 H- G* M7 G. x
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
, t7 C  F' G  F. ], S
6 w- E% Y0 h1 q3 t1 Y# A   //PSC
/ @5 A' o. q: F, @0 Z   //add Enable MCBSP
/ ]8 A! O( {% g1 B. N$ o   //test/ m' M$ j8 `+ F! E* a* W
   temp = 0x80000003;
% k$ A: h" V! Q8 Y  z   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
/ I. X9 x* u) J: ]   temp = 0x00000003;
4 M2 s, w. g6 b; ]# l* k   writel(temp, IO_ADDRESS(PTCMD_ADDR));! T* `2 c5 Q( O, _

1 T5 X; \& U* }$ N3 r+ r   temp = 0x001FF201;: N! C/ y3 j! }) k& ~
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));3 |& ?* i6 X" l" a
   " ?: f$ C# s! F% m3 a7 X
   //PINMUX  $ X# o  H8 ~+ W
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,+ U0 ~! @, d" Q! L. s
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
4 S# k4 \  c2 T2 A; p, u, U   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
5 D4 X. ^% L  K# U  w   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
; C$ Q2 q/ I  _7 }1 C/ y- q   
3 {4 l- s# C1 a   //SLEEP_EN,EPR,L138_SHK1,L138_RC
# w$ u! F  V6 @6 W   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  7 Z" o3 ^3 U7 C+ Z0 U: [' e/ k
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   : m" n& n: j# t0 O; C
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);& {5 y0 E- }) Q  M

) Z. D1 C* x+ a" q* b, h0 z   //RESETn,L138_SHK2
# C) V% [8 Z7 t3 Z) D; h+ s   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  + S! w( C- a( i( I1 E
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
! I2 |" h' _& ~0 W. C5 u; W# X) D" j   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
& A* u  {" e/ N 2 [  }% {% ?" V5 K
5 y- c+ d, _; Z* f" a; q
  //SPCR Register# b4 [+ T1 ^% H5 p7 ~
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
' [$ J) A* ~* r; ~: a* F$ h  j# B  temp = 0x03000000;//(DLB=0)
  Z9 w7 M  \6 V: {( Z$ z // temp = 0x03008000;//(DLB=1)
0 r9 q2 S$ e5 b  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset: s' F* E+ I) e( v# C% [
  temp = readl(IO_ADDRESS(SPCR_ADDR));
$ u( _: a# [; O0 X( D- ?. I  printk("temp=%x\n",temp);0 z, T7 a* r: j- q
5 m: v. {2 U/ N7 S& h5 L
   //PCR Register, ^4 |* L) y5 z8 @3 }
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
) j, K* c4 l. W  // temp = 0x00000F0F;7 ~2 q# |2 @8 u9 X
  temp = 0x00000B0F;
9 C& e# ~  {4 ^- b2 u  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized   f& K0 I5 c* B2 k/ [" Z0 r
  temp = readl(IO_ADDRESS(PCR_ADDR));) u# m) Z' ]3 t: F$ A
  printk("temp=%x\n",temp);  ' w* z) m- Z6 m( @
   //SRGR Register
) L6 T8 X; g7 t5 v9 r   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
0 @- w. n% n5 n; S$ B //temp = 0x301F000B;0 P; [; p: a$ e9 Z
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
* `6 v! K6 ^! o# D  I  temp = readl(IO_ADDRESS(SRGR_ADDR));
: F6 P7 `, h! E  printk("temp=%x\n",temp);) w# j( c: s$ y* z
   //RCR
- w: W7 t% S9 x3 ]   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,$ X" `8 Y) p; n: S+ h& l5 k. ?
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
, X& [' z1 d. x7 t+ p( o   temp = 0x00440040;+ b% n& t5 v1 [( V+ b
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   % q+ {9 g+ l) ]" {; K7 F) a) U7 y
   temp = readl(IO_ADDRESS(RCR_ADDR));
( ^$ g2 q) p( ]/ U   printk("temp=%x\n",temp);9 x6 C- _5 A# _; ]; f+ P9 ^
   //XCR- W. A: I% g) I6 B* D' o. M4 T# T9 ?2 F
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1. a1 P7 U: g. l6 Z
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
% t: d1 @$ d3 T$ Z( ?   temp = 0x00440040;
9 U1 s! b9 d5 _) C   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
- s1 o) s6 l8 r  [   temp = readl(IO_ADDRESS(XCR_ADDR));
, a, B/ E7 q5 ^6 k5 E9 n   printk("temp=%x\n",temp);
/ b; Y" l9 q3 @* i- d9 p  udelay(100);
1 a* x: s. Q2 t. N" }7 K% O8 q  //SPCR Register! d* m2 G( S0 f
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-12 |# t) @7 s& I% b* W. Y9 D
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
9 [4 Q; V  Z! |# v# r' c" G  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled' X. A- l, ^5 z; ]8 F
  temp = readl(IO_ADDRESS(SPCR_ADDR));0 ]$ p7 ]5 u1 E' B
  printk("temp=%x\n",temp);5 Y; n* `/ o" C7 d$ b
  udelay(100);0 I0 h$ P9 ~1 x. O9 X+ m+ X! @
2 g& q. N7 S% N7 R, O: t# x
  //set GPIO direction
. |& h9 @# Z9 x5 ^- F& d   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
  `& i6 L3 W  a+ H, V* J   temp = temp | 0x00000100;//EPR----input
4 w8 s5 y* M" J8 D* [: K   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output) I6 ^3 M  D2 Q0 H+ M
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
! h; V, c4 F' a1 _! ]   D, o# L. k1 Q4 |
   return 0;9 b/ B) }4 H5 T8 l+ R5 y: K
}
0 N2 l, c3 M; ^4 P  \! M( kstatic void __exit MCBSP_exit(void); J. U4 o) @6 f, n
{
, n' _% U' P0 z& N: Z/ z   printk("mcbsp chrdev exit!\n");
' ^, C+ V' N; Y; p0 W   cdev_del(mcbsp_cdev);
, Q) m2 i0 f  z& U# f   unregister_chrdev_region(mcbsp_dev,count);# O& n$ A. y: k) C1 @
   device_destroy(mcbsp_class,mcbsp_dev);: y2 z+ {( u- O- ]8 v2 f
   class_destroy(mcbsp_class);
0 ~; \6 h- d9 }}9 i: Q5 D0 s% J1 a7 ]' t5 D6 z
module_init(MCBSP_init);- j+ R- b' t* u! V
module_exit(MCBSP_exit);
4 q, `8 d) F# N
1 p) o+ t; ]  G, H+ F) w' I! }MODULE_LICENSE("GPL");! \9 T; Z' E2 I+ W8 r* ~0 S) c
6 z/ a6 h+ G7 t2 z0 Z
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
0 Z* N. r' u- |  X我的应用层的测试程序如下
" \! I$ f/ _0 R#include <stdio.h>: G3 `8 \* }0 U% }( @
#include <string.h>
( n7 z2 u- Y' s  |4 Z4 _2 ?" h#include <fcntl.h>' k/ b9 D! C  {+ N9 n0 e- I1 q2 ?+ O
#include <unistd.h>, x9 |! Q6 ]% T1 ]" Z: q; M; b# \$ c
#include <signal.h>8 b( W, k/ x( K. o/ {
#include <pthread.h>       //线程* ]4 e7 N7 a* T" t
#include <stdlib.h>
2 ^3 j( s3 Y. U( B1 J- Z#include <pcap.h>          //捕获网口数据
+ r" h' R9 l# I8 F$ L( t: [#include <semaphore.h>     //信号) @- C3 J3 ~% V+ W4 p
#include <sys/types.h>     //消息对列
7 n4 `7 u0 I8 c1 q* c- ~4 I#include <sys/ipc.h>       //消息队列
# c. @$ V5 q3 R, l#include <sys/msg.h>       //消息队列
3 K2 ^4 Y: p9 u: E#include <sys/select.h>) e* P9 L$ M" X# \9 z* ~
#include <sys/syscall.h>$ M* o9 d0 @2 h' p
#include <sys/stat.h>; n' j# ]# f" t
#include <sys/mman.h>
. P% Q9 A& r- W  h0 e#define msleep(x) usleep(1000*x)
, e8 w4 ~% [* d6 O* x  c
' s# ~4 h7 b- U# B3 h4 [  @2 Gint main()5 f4 M" R9 g: o$ ^3 b' h* N
{ & U  V( m. ^, z& C0 s1 c0 c4 M
    //MCBSP,ARM与AMBE2000交互设备% L% @$ X9 ]0 @
int fd;
4 r4 a; v& F7 t/ q! {; Y' } unsigned short data_write = 0x5555;
; b7 [8 Q$ [2 V7 ^: u" C; O' o unsigned short data_read = 0x00;
* d" r% H" G% O4 U, o  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
' \9 U( ^; H1 ?0 S //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
  b* l' v" ?: K0 l* O: n    % Q: a0 o3 E  l
  if(fd < 0)- K# Y4 J) w. H0 g
  {  S7 {% t2 H# g( W: g
     perror("open failed\n");
4 Y+ p2 k2 q2 @6 e% W     return -1;
- {) H8 k% P# ?) r' o  }7 \+ i2 M0 g3 M# f7 t& d# o
  ) g( J9 n  a% [8 _1 _
  while(1)
& |  c3 Y$ w' T+ N  {
1 o( u0 f: j4 H3 R# D   
* r! q  }% u' q   //AMBE2000每次读写是24个字为一帧5 x' M) j' `* Y  C* ^4 T! d
   //写数据时将数据在底层存储起来,等到中断的时候再发送1 ^/ m' i( q8 D0 @
   //AMBE2000输入数据是以0x13EC开头的! D) m4 q5 X; L- A6 X
   write(fd,&data_write,sizeof(unsigned short));
# G" J' B# A; s. s, Y" g7 o5 s   
" D! m- Z4 Q% A  o! l2 \: |& `   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
# G9 ^; Q, `8 E8 y4 p- t4 t  c8 z   read(fd,&data_read,sizeof(unsigned short));
9 F( b3 D; h3 q4 g8 P   # G6 p7 H/ V9 B6 ~+ C" ~  w& ]
   if(data_read == 0x13Ec)
: a- X. {8 |# \$ }+ K1 z* \   {$ M% R/ b/ P, A( r: n6 x
   1 K( ]/ ~3 f6 [: O  D8 a2 P
    printf("data_read = %x\n",data_read);
- s% H) o: E7 b- E" c   }& H. |. z$ p1 x: D
   0 Y6 O" G7 U* N4 S
   msleep(10);. t+ A  ^# K2 f
  
, z4 X& A$ }2 F  /*6 J  [+ F* m' [% d) j* e% O1 |# A
   ioctl(fd,1);   + R# L, ~( `  `" e  p
sleep(1);
5 T: {9 S: T+ k8 y1 a3 u- T ioctl(fd,0);
9 _$ N$ }3 G% e$ p0 z sleep(1);
1 T: H8 O0 u0 x5 _8 k& I */ ) @' Q& ?: G! H  o. ?
  }   5 \$ X0 f& i2 z& O6 x, W
return 0;
8 K& d" p" k# z7 u + q. n* k. ^4 ^- y0 b. r# ]
}
) a4 l; l! W5 F# X" g+ m3 P" d# ]. ~. _9 H- o
多谢各位指教,谢谢! 急' ~1 S6 l1 \1 Q9 V! M1 c2 |. o
# P' i8 Y7 u2 ~6 W
: [! k% }( c1 T3 {8 [4 b4 i6 b" s
8 \( W3 l% S2 P$ D! f

. g: W' U  N: K  @6 r5 t  K7 q9 N* A: c- n2 w) Z! x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 12:32 , Processed in 0.050153 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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