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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: , y4 p) T* y' r. d9 e
/*
" B, E1 }1 W0 @/ H7 p) q3 c0 Z * Copyright (C) 2009 Texas Instruments Inc  l6 G3 S3 C" h; A
*
8 [. P8 F9 D) _ * This program is free software; you can redistribute it and/or modify
! u- }7 ^2 g, O$ j; F2 h& m$ J$ @ * it under the terms of the GNU General Public License as published by
8 m- [8 H$ C2 s * the Free Software Foundation; either version 2 of the License, or1 F1 P. m+ u, c7 K  }, [3 l  j, a
* (at your option)any later version.
6 X/ [6 Y: ]) C' ?8 V* F *
# L, d. S% A' x$ X9 w * This program is distributed in the hope that it will be useful,
, V- @5 E8 e  g * but WITHOUT ANY WARRANTY; without even the implied warranty of
1 k) B6 {$ r& `' E0 x) X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 v3 e2 P6 U* E. [- V; J$ \
* GNU General Public License for more details.
/ m! g/ I! ^  |' u/ b2 A/ G- B *
% m/ G' ]9 `0 J( i * You should have received a copy of the GNU General Public License1 F  ^1 F' p$ {. t7 D; A
* along with this program; if not, write to the Free Software
. R# D4 s0 I1 B) r * Foundati- ^: y. x# S1 h- V0 p3 W( t
*/
" M$ ^% W4 d6 B0 b  Q" M  {# a#include <linux/module.h>
: k1 T8 J' }" Y4 p#include <linux/init.h>
/ o+ S( W+ Y8 R5 u$ O#include <linux/errno.h>' @8 p( }$ J* p
#include <linux/types.h>
; x: A* }5 w- s#include <linux/interrupt.h>
' W+ G/ ]6 l: q  E#include <linux/io.h>
3 U  C9 t( k% _1 i( t#include <linux/sysctl.h>
" _# \/ \( k$ ?0 S, r#include <linux/mm.h>; E8 X$ ~  n; H
#include <linux/delay.h>; r" ~& h7 Y. I& }- h
#include<linux/kernel.h>
3 m5 v0 |7 B( G$ X; h#include<linux/fs.h>: f( ?2 W: T4 w( J3 g; ]
#include<linux/ioctl.h>
* ]& g. Z2 v6 Z#include<linux/cdev.h>( I0 a! ~; Q0 u  {, C# X
#include<linux/kdev_t.h>
3 p- {4 A7 l# x#include<linux/gpio.h>5 g& E- d4 a& D
#include <mach/hardware.h>% l  a; [* K+ w9 y
#include <mach/irqs.h>
" ^0 Z6 W  u8 J9 o+ I( B; u: B( d3 s- v2 b
#include <asm/mach-types.h>- R% l! c/ ]5 g- z5 }( N& k& u
#include <asm/mach/arch.h>
% U9 i9 |7 j, n) q#include <mach/da8xx.h>, h! G4 Z) ~8 U) `  Y
#define  SYSCFG_BASE   0x01c14000
$ Z8 Z' ]: E6 r& J#define  PINMUX1_OFFSET   0x124
  \" |9 l* |8 `* O) A  t! O! {0 Z#define  PINMUX18_OFFSET  0x168 * v9 `6 ^! T' Q0 H
#define  PINMUX19_OFFSET  0x16c
/ B/ S) ^+ n# y4 ^, `( y9 m0 C( p#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
' N8 X$ P& Z9 Z3 p0 e" z3 c#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR( ^! t4 o# k2 g9 F: `3 h, ?1 r
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
+ e2 c) I( P6 Q& }. F7 z#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
1 v* k( p! _1 m#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR$ l- z! {3 o; s) c0 ]
                           
( J2 V+ G; q) s4 x7 ]#define DXR_ADDR      0x01D11004  //MCBSP1_DXR2 L3 u+ J0 K: o
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR5 s8 D' q( l" l/ j6 N
//PSC
+ N! O- j( v  l( Y% a#define  PTCMD_ADDR   0x01E27120  
2 \% I: _+ r, [0 F#define  MDCTL15_ADDR 0x01E27A3C+ _( ]. a6 S# Q; q! [$ g" c& e
#define  PDCTL1_ADDR  0x01E273045 J' T6 h5 u# s7 P* f
//GPIO8 direction2 ]( D7 m" }- }# P; }  {6 j4 g
#define GPIO8_DIRECT  0x01E260B0
1 i& r8 l! E+ y#define GPIO8_OUT     0x01E260B4: q9 i) d% p% x7 B. \8 J- z( k  {1 M
#define GPIO8_IN     0x01E260C0- }1 p0 T4 ^9 r' [3 V

9 k9 b% V" u2 ]2 i2 U//#define MCBSP1_RINT    99              - w" ^/ n6 p3 B/ G& C- |
//#define MCBSP1_XINT    100  
& c6 E( a& L, s7 P0 Wstatic int MCBSP_MAJOR=239;
3 o0 ^6 C7 g$ l$ g4 lstatic int MCBSP_MINOR=0;
- d3 _  _. Q  }9 sstatic int count =1;/ R/ [! V2 z% `1 Q

- }0 q1 X# Q9 |; I- F  @; O  \#define MCBSP_NAME  "MCBSP-device"7 t% G0 d* y# [4 O- Q/ q

/ ^# H3 I4 S3 z; h. W0 E: P; o% qstatic struct cdev *mcbsp_cdev;0 Z5 }' G; Y' e
static struct class *mcbsp_class;* n+ n( M. k/ }1 {- V
static dev_t mcbsp_dev;* L: M6 f( B( ~: d! Z# m) }5 H  a
unsigned int DRR_data;4 l0 T0 A) l; w- G1 C4 j
unsigned int DXR_data;; }& o% Z! y/ q% M6 s; M: P1 T
static int mcbsp_open(struct inode *inode,struct file *file)* C0 M7 t* E! t6 s
{$ j2 o$ F8 L# k! W, n
   
3 C, b7 D! ^% }' A8 L/ v( E   //interrupt enable,initialized$ C" x6 B# u9 t$ D; o/ j- L
   unsigned int temp;
9 c8 y. P& |  t, c: _. q5 @) O( L   //SLEEP_EN(GPIO8[10])---02 R/ T" j( j$ Y& V& Y3 `
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
; q; {3 M% V0 y' \   temp=temp&(~0x00000400);
0 }& f1 Z% W, S- u  t+ s* W4 j   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
0 E& [* ~( j8 F7 [) Z/ L  //RESETn(GPIO8[8])----0----19 E0 r* U$ W! w
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
9 g& K# w# |' F  i% [4 W   temp=temp&(~0x00000100);
+ g+ i. T5 X' v) d& M' y' X) [" }   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---00 m) O+ ~; {: @. U
   udelay(100);( D/ x2 `* v0 ]7 {1 m
   temp=temp| 0x00000100;  e+ g' @6 R4 n- r9 x  \1 T* m
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
- \8 ?7 W$ G) R5 s/ B9 l! U   udelay(100);
) x: k! L8 R! ?; q* t1 S: j   printk("open success!\n");7 o0 Y9 L. c( B: a9 o  ~
   return 0;: p8 h) H+ N6 I4 g5 W! f
}! N+ O' _* T6 d

# L. F/ y( I: ^% i; o3 Ustatic int mcbsp_release(struct inode *inode,struct file *file)4 G+ M5 m5 I4 t! A  J  v% _
{" h  F% g0 d7 s; l  A' n4 p
   printk("release success!\n");
: R: |$ z# K! t) p. R# \   return 0;& {: L( ^0 Z: `0 t6 ~
}4 B/ [) F, v# E. ]! s9 O
1 G1 U8 R2 R; G6 d) s
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
6 R) ]0 r7 [+ k' T! P2 [/ M3 z{) W  g$ z. k: m" ?2 K8 @
    copy_from_user(&DXR_data,buf,len);
6 g! q" _4 R- c    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       * u' t1 |  D+ G! U6 ]
    return 0;
, y+ c+ ]3 Z7 d2 K, V : u; [- r! o: V; N6 R$ g% m
}: V) z8 e3 D( E4 K, K

1 {- V# ^! W$ t3 [3 K' I& xstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
4 H, w7 \3 L7 `" g  @& [: W2 z{
4 N  V5 O4 s5 q7 a$ d* h   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));- M8 W) N2 N. Q2 h4 Z0 \# l; X
   copy_to_user(buf,&DRR_data,len); 7 ?: G( E% V( X- X# r7 a
   return 0;  ~  _+ z) I8 ?
}
" x$ `8 b* x% W: q* _) {( C
8 ]+ a; H2 o0 Q" s
/ b' y' z: p+ L+ X1 Dstatic struct  file_operations mcbsp_fops=
. u1 n5 m5 W& o8 d8 o0 o{7 F4 L* l5 R, \6 @
   .owner=THIS_MODULE,
/ o2 H1 ?9 c2 c7 ~% |   .open=mcbsp_open,( S9 V# T( W0 [
   .release=mcbsp_release,; M! \1 F0 D# ]1 O* P
   .write=mcbsp_write,
4 @0 T# N( N& Y9 s3 c6 X   .read=mcbsp_read,. l3 ]* `8 f6 o
};/ o7 r, {" @9 K- V
static int __init MCBSP_init(void)3 _* S* T9 E% E  e/ N
{
* V! H/ J, q. K% g' K   int ret;
; \& L8 g' `' Y   unsigned  int   PINMUX1_REG_old;, R! ~$ {! L' r$ i# Q
   unsigned  int   PINMUX18_REG_old;1 |$ `* ?1 h+ C
   unsigned  int   PINMUX19_REG_old;
# B0 \/ m5 Q. E   unsigned  int   temp;  : z, W( s& j7 S$ |, w3 ]
   if(MCBSP_MAJOR): \3 I/ _' G9 R3 t9 p2 L% H# e
   {& e0 j9 q1 G1 W' F. @: W% e( l
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
, D+ \3 T" F3 l8 f4 ~6 k      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
" u5 x; [1 y' Q3 L7 r& T   }
( ]9 k: t- d( ]. V5 x   else- ?4 J. V9 u: D6 \+ m; m
   {
/ X* I6 H) r) i- }1 r0 G      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);+ v2 N0 }! z& W1 Q) b- }
      MCBSP_MAJOR=MAJOR(mcbsp_dev);0 j4 ?" ]  n: ~
   }( s8 @# ]9 U! d! N( h: `
   5 J/ P. |8 C4 X+ x7 U' V: o$ \4 ^8 i6 l
   if(ret<0)
! C* Z$ X/ }& x+ l, |! y' z( {   {
( D5 S; T9 p6 d9 B0 ^1 h      printk(KERN_ERR "register chrdev fail!");
: I  F6 G" {' J5 Z, k: x7 E      return -1;
6 ^* w( {5 t8 r' _' N  ?4 o" w( m* `, t   }" S+ U. G' |1 u3 x9 g* M
   
! I; z$ p3 ~! I% g   mcbsp_cdev=cdev_alloc();
, D7 U. b+ h1 a7 O3 E7 N( K   
, F, l0 z% }0 l3 w* E& @   if(mcbsp_cdev!=NULL)$ L" u+ n4 O- r# s
   {
: ^# X8 I% E! @( ]- p7 q( C      cdev_init(mcbsp_cdev,&mcbsp_fops);
) T1 F+ H0 H4 j. Y7 p      mcbsp_cdev->ops=&mcbsp_fops;% E0 ~6 d. h: C2 W4 `: n
      mcbsp_cdev->owner=THIS_MODULE;
3 S* ?  k- `+ [* z      
  `) B0 c* [6 ^0 N      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
) T# g8 R& N4 p* Q) E* h          printk(KERN_ERR "register cdev fail!");
6 S" _" T2 r5 H" ~" p5 l      else0 n6 W( M& q9 v8 A% z  t' V
          printk(KERN_ERR "register success!\n");* W, D  W7 _! m# C. t, v0 w
   }" n& ~2 _* @! B  c5 s
   else* O  p" E- z" \7 ]0 j" A
   {+ O/ v, ]" S1 U! H
      printk(KERN_ERR "register cdev err!");: n3 f$ j( A: i& [7 {
      return -1;
1 B2 K# @" Z6 A  |( D7 r   }
$ E, f# l; T. z/ z2 w" Z8 h   ' h- T2 L  d0 ~; A% V6 }
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);5 o' J3 b5 t& t) v$ ?
   if(IS_ERR(mcbsp_class))4 M, F% Y+ C3 _8 o2 l$ S, U& I
   {7 V% i& d  z0 D
      printk(KERN_ERR "register class err!");
$ Z/ S3 F( i2 I2 U, k   return -1;
+ N9 A- E0 a5 H" F8 _9 d   }# ?' S. t; E8 M- ^8 s& C7 S
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
1 j4 ^6 g( j3 O+ ~# Y# \( a0 j
' n8 N/ e6 b( s9 J   //PSC
0 ?) e. ]. u% I8 ]* \1 Y1 i* r   //add Enable MCBSP6 i- s' U( G, h/ ^
   //test) g# g1 K, z+ T9 S1 t  d
   temp = 0x80000003;/ t# p6 W9 r0 O
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));* e1 f9 X3 v: q5 C% z1 I- c/ p4 R
   temp = 0x00000003;
2 O8 V3 q7 z9 t6 }' J   writel(temp, IO_ADDRESS(PTCMD_ADDR));
$ o; c! U4 a" s4 o+ S4 D2 N ) F/ D' I8 s) p8 o& A
   temp = 0x001FF201;; ?9 P3 I4 J# W
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));  a% y0 c3 b& ]; k5 E
   3 _  l4 k7 M% b; W% F2 \
   //PINMUX  5 I' o+ t1 P( o% ~% `9 K, `# Z/ w
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
$ a0 J3 ?) X. y: J7 r% W$ x   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
8 P. O8 b0 u. b   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
* _4 {' @$ O; }2 [' @' ^; n   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
( z! E# f9 s  b, Y+ L- p  X! P, H+ c   
7 o( [) e9 P) Y4 ^* b. B# C3 \; s   //SLEEP_EN,EPR,L138_SHK1,L138_RC" {5 t* `3 n; O
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  7 o7 ]+ J" |% m3 z* J
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
( r4 c! t, q. d& C   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
2 z$ L8 g5 r8 ?7 K: {) {! O: g, v& j
9 o+ r2 j0 o  H8 @   //RESETn,L138_SHK2
0 t# M% j6 ?" P/ h$ p' C   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
. d5 \( V7 s" E1 O6 @6 Y   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   # T8 P) w# w+ y1 z" j
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);: E# U6 c' U7 C. ~

' T- t2 b6 g6 ^3 H) j; _
  ~- T0 k( M! R" I  //SPCR Register  G1 F. U4 }4 E  v- P7 a
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
! b+ U" S; Q6 O2 `8 C2 H  temp = 0x03000000;//(DLB=0)
$ Z, w* j  p( [1 }* I. V // temp = 0x03008000;//(DLB=1)
! v; f1 R0 S3 O% J! L! _$ t" \  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
/ e' W: S! }: e8 u  temp = readl(IO_ADDRESS(SPCR_ADDR));7 w/ t* B* N( c
  printk("temp=%x\n",temp);3 B1 f$ I% z6 B' C& j, P7 u
* i) K2 U0 u  h: D3 r
   //PCR Register
  @5 w  e4 g2 g. r) b  `% K   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
* Y- H; d8 S$ M$ q  // temp = 0x00000F0F;
- l1 Q' l  E& J7 O9 c" ]2 X) E  temp = 0x00000B0F;
0 [' O7 @3 k- c8 z6 X0 d: M2 v  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized - ^4 y+ E) A; a" M. L7 u6 h
  temp = readl(IO_ADDRESS(PCR_ADDR));% [0 Y0 F+ X6 k
  printk("temp=%x\n",temp);  ! y. u, W) R0 c. Q' O
   //SRGR Register
* E5 |/ E% [! x   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11, L) l. i& V- z
//temp = 0x301F000B;
9 ]4 O6 @: d0 `/ [7 t. G& X   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 5 L; f- A. U! B7 E% b; @
  temp = readl(IO_ADDRESS(SRGR_ADDR));1 H6 d, T. @; Q# [* n; S0 X4 B
  printk("temp=%x\n",temp);+ U, O' q  ~6 c. U# h) k) a2 a
   //RCR
' s; i& Q- V: ?   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
3 Z$ E+ P+ U6 K% {6 H   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
' U$ T( ?) x$ t' K( Z# d# D   temp = 0x00440040;6 _/ \0 D! z' {+ ]% z+ G0 b
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   & @1 h( k8 L: \+ R- U
   temp = readl(IO_ADDRESS(RCR_ADDR));: v9 [' s5 a. D" u' D
   printk("temp=%x\n",temp);
1 O3 ?- X4 l& ?# s+ J   //XCR
: e" H9 u/ b0 S& A7 M* B   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-19 {# Q1 E. Z' d) ~; o
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
) ^1 U3 f0 a; a& z   temp = 0x00440040;8 m% R% f' n& e* B
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   - w0 ~/ b5 P+ m8 |
   temp = readl(IO_ADDRESS(XCR_ADDR));; S4 U0 q1 [# I" N2 U6 C7 f5 y
   printk("temp=%x\n",temp);
9 L, z7 t$ d4 B! p  udelay(100);
, L3 J$ Q, ]1 X' f6 n; k4 B9 \  //SPCR Register- T. X1 s% R( p' w' U
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
1 Q( T/ Z  M4 ]" ~1 E  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
. l, V# e2 j* \  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
7 _- n' I  q6 {4 S' M  temp = readl(IO_ADDRESS(SPCR_ADDR));' }# N9 W" |  R! U
  printk("temp=%x\n",temp);
9 Y( t/ A  s$ [, C3 W3 t; G  udelay(100);- x( g" M% ?+ J( z

- h, J& D2 s% o3 _1 m1 w! _- _  //set GPIO direction( s  k6 ?4 x& B# G
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));) I6 t( v: ?- A7 O
   temp = temp | 0x00000100;//EPR----input" F5 e: w8 x1 ~. `# F7 l. D3 k
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
* h$ n2 i/ |7 k0 L& a! t   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); $ p! }; Q: K. R! I& Y
" D( z7 L. c$ N, x
   return 0;" [* H% S! r, E4 [( @
}
+ l) X( ?( u* b& B% R/ ?1 pstatic void __exit MCBSP_exit(void)3 g1 u8 o2 s0 O6 H: `+ p5 L( w
{6 _7 \# a# A1 {, V5 g0 P- C
   printk("mcbsp chrdev exit!\n");' U) z/ W( I2 m. T* J
   cdev_del(mcbsp_cdev);7 d* v3 g) y  q- l- U" V) u
   unregister_chrdev_region(mcbsp_dev,count);3 C# N; q% J, s8 x& P. }) j; {
   device_destroy(mcbsp_class,mcbsp_dev);
1 ^" Q$ E$ D$ ?0 ^/ D   class_destroy(mcbsp_class);' G8 s; _* \+ X4 i) \4 a- M
}
* E$ Z9 q7 L; w$ w: G4 k9 Qmodule_init(MCBSP_init);
! I, g' S- a- E: T; }7 c, |! c+ Bmodule_exit(MCBSP_exit);
% T$ S- U4 `7 s/ t& q+ N- F9 c/ ?2 Y6 G5 @+ r9 C' q4 {
MODULE_LICENSE("GPL");6 @! q. X; _! F" M' s
- ~% O7 E. q  q
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
: O  V5 E/ z' e9 \我的应用层的测试程序如下) ]1 ?. D+ x& A2 M1 L. i
#include <stdio.h>0 ~1 m$ D% H# }- k
#include <string.h>
( @/ f9 ]! b4 `7 M$ ], ~' K1 m#include <fcntl.h>
# N/ M1 M" m3 [# m, A* l#include <unistd.h>
0 L! ]$ N8 H! t" [. {#include <signal.h>" Y8 O! J% X$ i$ B3 C  U
#include <pthread.h>       //线程6 b$ s) v7 T4 y9 B: e8 ~
#include <stdlib.h>9 \6 L, j( q- j* y: M9 D' m8 u
#include <pcap.h>          //捕获网口数据
2 Y% `9 ~: b: p; G8 g) J% p& x#include <semaphore.h>     //信号3 ^9 P+ u! g6 W, ]" x" ^" e
#include <sys/types.h>     //消息对列7 H. e& @% c0 N& y# r
#include <sys/ipc.h>       //消息队列$ i" ?4 D1 T! |/ }. Z
#include <sys/msg.h>       //消息队列
+ U$ k. q8 w! Y) C- w$ w1 x#include <sys/select.h>
8 h1 A. }2 w0 L: s! O% V5 b#include <sys/syscall.h>% v" j0 p1 |5 D+ I: }) B# T1 k" |
#include <sys/stat.h>+ F( _* z/ `5 c
#include <sys/mman.h>! }0 ~/ z3 G( d" i3 _# w
#define msleep(x) usleep(1000*x)
) y  A) N  f- p- j) G; Y0 u. I+ \( u2 ^+ G* \( {, ?. m  M$ j) C. z* t
int main()
0 R8 @$ Z4 [0 q2 D9 n4 t/ ?{ . r6 ^4 T, w( C+ G+ o. S$ a" b" a
    //MCBSP,ARM与AMBE2000交互设备
: m' f- }! H4 R+ G8 K. r- v int fd;+ ?2 G5 J9 |0 l# _' O% ^. l
unsigned short data_write = 0x5555;
0 X) l. [: r9 Y# x: D* \5 a7 Q unsigned short data_read = 0x00;
- Y& Y0 [1 X4 f0 B, d$ Y. _" j  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);' N! ]1 q3 j3 J. ]: h3 y
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);# ?3 B& w0 ?2 U
    2 ~& d" E; P9 f) y
  if(fd < 0)
' w" d' ^- T/ C  {9 O. ]) _- p" E
     perror("open failed\n");5 X, c$ P, ^: A' i1 E" W1 f+ q3 |
     return -1;7 r$ y- c$ w2 K  m3 l$ x: l1 Q0 o' V
  }
1 d& n( c2 w+ g8 L% F% ^  x4 c7 {& M  
. n: l$ z+ \3 F# V  while(1)
9 ~0 h1 Y* h7 Q& C5 g  {
; \, t% R  _2 l   
" n; J9 z! J0 o: o1 V  o( X   //AMBE2000每次读写是24个字为一帧7 T& g# F: h) w& J! l6 Y! a
   //写数据时将数据在底层存储起来,等到中断的时候再发送/ v7 b! Q+ \5 H" f
   //AMBE2000输入数据是以0x13EC开头的
" h. S0 `; H6 r% u! `8 g' ~   write(fd,&data_write,sizeof(unsigned short));
7 Z# D3 [/ w1 y   7 v2 C; S; c! O, a: u" o7 m) A
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  . h) g/ `/ Q, g0 Y
   read(fd,&data_read,sizeof(unsigned short));" }+ w( ]- f! c  e
   ; J- u8 E$ m( h
   if(data_read == 0x13Ec): V! f* m; K/ s# i1 l7 e& x5 Y9 ^
   {$ u) q$ C( v) f" X, {) U2 ~% u) P4 @
   
1 y. F/ I+ Q$ g6 U" j$ S    printf("data_read = %x\n",data_read);
2 a: @5 A: s& S" h7 g( `3 b7 }  y   }/ M) B, l# }5 C8 n; g
   
9 i% V5 z7 g$ v. S( c   msleep(10);4 l3 P  W  m1 p) X2 t& L# ^
  
, i9 c" h1 Z' r7 }# R/ Q  /*, Z3 s  k0 X2 }& S) X
   ioctl(fd,1);   
, v* j6 Q( O7 O& m sleep(1);
5 N) f" L# n  H1 I5 m ioctl(fd,0);
1 [' W0 t! a9 m! H" a1 m; T sleep(1);
+ h1 v! _, ~% l/ ?2 j: L! B* E */ 5 h7 j: u3 e5 p9 u& [* r
  }   
( ~9 e7 d* i8 r6 m; Q( ? return 0;6 P! T+ d2 S% W$ N7 Q

$ T4 ]5 U& l. R( X* E  u* |}
- o8 M; N* F$ y: {2 t( G% _$ a2 j+ F" c' L/ j/ s, O5 F
多谢各位指教,谢谢! 急' p$ w( ^, X6 k  F
7 V# q1 U5 d) C9 t5 L
5 b; `3 z. \. t
! _$ a- ]& }5 f. g, v
% c5 i/ i& |8 X) e6 n% b
! X, K& R( L3 w% P) l4 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 05:18 , Processed in 0.049422 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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