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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 8 J' T0 F2 ^# {. H4 J# M% A5 ]  ?
/*
: Q+ E3 A7 L2 Z/ B9 I * Copyright (C) 2009 Texas Instruments Inc6 Q* p$ P( C. _% S
*
' v3 i9 D" K2 c+ a6 _* x9 I * This program is free software; you can redistribute it and/or modify6 i# C% }% e# a$ ~5 p
* it under the terms of the GNU General Public License as published by
" h. t" X* }: d  O( V, x * the Free Software Foundation; either version 2 of the License, or
1 o" o* X6 M- p( G$ x * (at your option)any later version.
) g7 a4 z- d; f) X6 u& ? *
6 Z6 b# V* S! _% K8 C4 i. s' k * This program is distributed in the hope that it will be useful,  @: P9 D7 V/ f# \4 p
* but WITHOUT ANY WARRANTY; without even the implied warranty of
$ a" f' ?0 b5 J2 T% O' t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" r' I( S/ L. D$ f; T * GNU General Public License for more details.8 B% [* Z; ~/ b# T3 f
*  L/ o0 r$ ~) M* u" \9 F
* You should have received a copy of the GNU General Public License
) k9 P1 r7 v9 B0 [* Z) h$ `+ v  s * along with this program; if not, write to the Free Software
: J* g4 v  T5 y * Foundati8 b6 A  y+ L6 k; y- C$ o% i0 B
*/
% u! w/ i& R% R5 g+ \7 Q" F#include <linux/module.h>
- l# Q0 A* |, l" B#include <linux/init.h>* {; A, D/ ]& P3 w
#include <linux/errno.h>3 o& E# t& M3 R' U+ W6 L) S
#include <linux/types.h>5 F  q' o; t( P' ]  \+ m  Y( b
#include <linux/interrupt.h>  @/ h) O7 U: Q2 ]! M% v
#include <linux/io.h>
7 I# j& J% }+ y) m; U" i6 o#include <linux/sysctl.h>
& z2 ?" c( p2 X#include <linux/mm.h>
2 n& n5 n: P. C; w* ]. L#include <linux/delay.h>
1 r3 c1 b: x* l. C#include<linux/kernel.h>3 `* ~: L  I8 {: @: B7 v
#include<linux/fs.h>+ E3 h+ g4 q+ f1 i
#include<linux/ioctl.h>6 L# r( U9 a2 p' U
#include<linux/cdev.h>' B# I: g9 F" W: J
#include<linux/kdev_t.h>
. R+ m- ~9 y0 B/ o1 J) x( V, x" o$ U! g#include<linux/gpio.h>* U* ?; R6 @& R6 U8 A
#include <mach/hardware.h>
$ M0 b# Z  P* c  v! N#include <mach/irqs.h># B1 S1 N0 ~, H, x% O

# m  m: B1 F# E0 d" v#include <asm/mach-types.h>
+ g; O, R# e, E2 ~1 a0 {#include <asm/mach/arch.h>6 l3 L6 [: K9 x6 G" y
#include <mach/da8xx.h>, ^6 p* D+ s  B# o5 q6 Z* G* z; |9 D
#define  SYSCFG_BASE   0x01c14000, E, H$ U. ~3 j- ?: U0 C7 e( e
#define  PINMUX1_OFFSET   0x124
2 E8 k4 ~& F+ L# ]- d- V- f#define  PINMUX18_OFFSET  0x168 : l: A, k  h9 O7 T/ y
#define  PINMUX19_OFFSET  0x16c
& x1 K- b) m* ]3 {#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR( P& u# t% U, K% E- d$ E
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
9 k0 V1 L5 X  r0 V#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
' M. f. N" o" ]0 n) B#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
  E2 ]* ^$ P* c. g#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR3 V$ p9 X" N9 z/ k# Y
                           
7 W5 Y) D: H* ?, Q#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
: J) O& n! k! q% D( K) w#define DRR_ADDR      0x01D11000  //MCBSP1_DRR: B5 n0 x% S# b% w9 @: Y
//PSC
  p/ \& m" z/ T. M#define  PTCMD_ADDR   0x01E27120  
1 X. |4 d4 u) ]& f#define  MDCTL15_ADDR 0x01E27A3C7 Q6 K$ {, R" q9 _9 B* ]
#define  PDCTL1_ADDR  0x01E27304$ s, {/ A. Q! M* b* f/ Q
//GPIO8 direction2 z# \  ?# a2 ~6 n/ N5 q2 j
#define GPIO8_DIRECT  0x01E260B08 K  U. v2 ?$ D0 c+ k( y0 Z
#define GPIO8_OUT     0x01E260B4( E# L2 z* `' E6 h4 |8 t
#define GPIO8_IN     0x01E260C0$ K2 i( R$ e: W0 U  i5 d
5 p# Z: D& k% [2 C+ P/ ~5 I
//#define MCBSP1_RINT    99              
* o; \& S4 l+ o5 c* ], d- q//#define MCBSP1_XINT    100  1 i+ p, {+ \( u/ I
static int MCBSP_MAJOR=239;+ C! j. [& o. q! N1 F5 b
static int MCBSP_MINOR=0;
' ]4 I$ c5 d. b& \static int count =1;7 D. Q! H. j7 ^: y
4 Z1 y- n  U3 t& F
#define MCBSP_NAME  "MCBSP-device"
$ }+ `( t* l1 a/ Y6 T9 {  A, j2 l5 E1 L- y3 E
static struct cdev *mcbsp_cdev;  m- B/ M+ a2 g( O: U: l' v( q( P
static struct class *mcbsp_class;% A% l  W3 M* G0 G( s7 w
static dev_t mcbsp_dev;) q6 j4 E) ?  c! M
unsigned int DRR_data;2 d7 H) k7 i1 f" B
unsigned int DXR_data;& _- W' ]" |# P) e
static int mcbsp_open(struct inode *inode,struct file *file)3 n* x8 z! V" Q* R5 P  _; G. r
{' I2 w. ?1 o0 m8 l( @
   + m5 A1 }! x1 B2 M3 S! p6 H* v
   //interrupt enable,initialized# I8 Q: L; z5 Q: S% a5 c
   unsigned int temp;: f( ^: \7 B- a4 Q$ }7 s
   //SLEEP_EN(GPIO8[10])---0" J0 k, b. E( e( H( X6 j/ W$ {
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
: C: o( ^7 d8 J. \   temp=temp&(~0x00000400);
) H/ m$ A1 S; m' e: q( g   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]" }% N; M3 U: A
  //RESETn(GPIO8[8])----0----1& N1 ?" Y) x3 R
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
) u* ]" [2 d$ Y   temp=temp&(~0x00000100);
' M0 \; ]7 G  E! Z: o   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
& n% \  B; F: h8 N+ v6 D3 o   udelay(100);
: P' X. r+ m' l" U   temp=temp| 0x00000100;
( P; l/ h4 ~7 P8 S+ w4 l$ b4 ~   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---18 Q# c( c4 _* W/ H
   udelay(100);
, o* B% O8 A+ O/ T   printk("open success!\n");- n, w2 S6 h  q' u
   return 0;* u: \  S6 a3 N8 ^2 d/ X. M0 {
}6 I" f; \, w) c

; V3 ]- c- A8 W) c' p+ G: Pstatic int mcbsp_release(struct inode *inode,struct file *file)$ ^9 {3 f6 V# @3 C
{
) ~6 R  U* }+ q5 b( @3 A   printk("release success!\n");8 ?* a1 ?# h4 M+ h9 Z
   return 0;" `& w! U6 q0 e9 o% h
}
7 n, r% V( o4 S( o4 P, I
! K2 O0 a% f4 [' gstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)$ \! D5 w9 q9 W, M/ O8 v
{
% Y" {) [! n" p, W3 |  a8 d6 ^    copy_from_user(&DXR_data,buf,len);
2 |% O, J% r3 U& }' G! ]) g3 C    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       % a2 a: G9 a. E" u3 b9 k5 J5 d
    return 0;7 s/ B% p5 ?& y% r2 O

6 K" m+ J9 t6 h6 _7 [# r}/ l  D; Y- B) M

8 L$ ]% Y5 u& K5 U5 Q& Sstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)5 w- x; A$ {, o' b
{
" H( N0 a) [# g  n+ q   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
9 M5 A' J4 S# R   copy_to_user(buf,&DRR_data,len);
7 B* [6 Q& m, T$ v, ~/ _! [( K   return 0;
. t0 t6 @6 R3 n* N9 G- t4 D}
& a1 D  z# `! E! {! h' r
4 j0 M- N( ]+ E% l
* O" u# ?# K3 Kstatic struct  file_operations mcbsp_fops=; x$ M, a7 |3 A7 S! \
{' T/ w: w4 Z* V# I+ |; m, s
   .owner=THIS_MODULE,
/ D" g6 X+ B4 G, }) ?" o4 M   .open=mcbsp_open,/ T( I; i( A9 y( B/ d0 k
   .release=mcbsp_release,
7 \+ B0 @1 N. P9 s  x   .write=mcbsp_write,9 ?7 T& g0 |* q( Q
   .read=mcbsp_read,
5 {$ j% M1 F9 x: V" |8 `};
% v) ^- N; w9 G2 L# v2 ostatic int __init MCBSP_init(void)6 [7 |7 {( i3 L6 a! U
{& ?7 k" q6 `3 j$ {) `
   int ret;
8 v- v" M! v( d" c; _# a4 C   unsigned  int   PINMUX1_REG_old;
* h8 Q0 w& C! {( v, G+ w+ |8 h   unsigned  int   PINMUX18_REG_old;
' H+ F9 ^: s: p  d1 @' x9 d/ a% C   unsigned  int   PINMUX19_REG_old;( G' R1 C" R3 C7 y" k+ D$ C
   unsigned  int   temp;  * n) t2 U  b: Q% h' D2 c- w
   if(MCBSP_MAJOR)) ^; V( ?  E; Y' D
   {, [/ ?- r5 ]. |; z% u/ t
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
+ o+ ^+ h9 {/ v/ ]' l      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);" W; k  a* m* F; |; R. i: u' R# C
   }2 J8 c/ @3 \* `' J8 x* \
   else0 k# w' [; g( N( f/ `( O& _; E
   {. K! Z/ @- n! @. f. K- `' ^) S* ^
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
- U' q1 O8 q1 i4 l: u0 ~9 ]      MCBSP_MAJOR=MAJOR(mcbsp_dev);4 w. n! K$ z8 v1 h8 X4 F* Z
   }
2 O( x) Q$ c9 u' O, Q7 l   ' m6 k) X8 [2 Z/ G
   if(ret<0)
! ^: B6 Y* Z, b( l/ `   {
2 _) R" \% n9 P7 P      printk(KERN_ERR "register chrdev fail!");/ a" E; }9 Y# ?
      return -1;& ]' D1 A' p6 I* j
   }
6 X6 p) d& }/ u/ N   * M& ?1 i2 T5 ^0 L' c6 ?
   mcbsp_cdev=cdev_alloc();
, x: V9 m: B+ D# n* B   
# p8 y1 H$ v: K* ^# D6 m   if(mcbsp_cdev!=NULL)* R) U; q2 R$ W3 I; O
   {' X+ e$ J2 p3 U& n7 l& S
      cdev_init(mcbsp_cdev,&mcbsp_fops);
* V) A, X' }7 P+ g      mcbsp_cdev->ops=&mcbsp_fops;, C* j0 ~( X. c& L; r0 w
      mcbsp_cdev->owner=THIS_MODULE;
4 d" a+ T* I% |: i6 _: o  @      ' ^/ L- G3 G6 D+ N1 Y: t
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
! _" b. f4 \' p: A1 p% `          printk(KERN_ERR "register cdev fail!");
* P: r. [; {& _. Q' c, y      else
  o+ q2 ]& q3 v# d" \' N. j          printk(KERN_ERR "register success!\n");9 p$ `2 X8 v, @- A
   }" k* S+ A3 m/ {
   else+ v2 M( K* ?" k
   {; u9 Q: v' R! v5 v( ^
      printk(KERN_ERR "register cdev err!");# D9 p" L, u9 \, R- s7 d
      return -1;+ z1 Z  ^0 B6 e
   }
9 F" H0 \3 P8 N# H3 ^" Z, E! u   
4 P( l9 P0 u9 O1 ^) S( P3 P  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
7 A/ Q* r2 w" z& M- ?  l9 Q   if(IS_ERR(mcbsp_class))" O! n6 {2 X0 j$ t- }+ y
   {, o2 |# H( K8 P) \
      printk(KERN_ERR "register class err!");
5 p+ ^  ]8 }. V0 f# A   return -1;
, }7 b( T8 ^3 ]' S4 [% d" f   }
% i  S7 ]6 o8 A; u4 @   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);# P! _6 G1 j+ c( H" g2 g! `/ ]/ _+ p

  [5 x2 J5 \  u8 a   //PSC9 ~3 t& Y! X3 H) R, o4 o' w2 }
   //add Enable MCBSP
7 L/ |  _" h2 S# h   //test& J/ ^. K% c) D
   temp = 0x80000003;( a6 y, U7 D6 @- S6 s& M' I
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));& C+ E: z6 N" f% p' b7 ~1 T1 C
   temp = 0x00000003;% C  T: f7 D6 z- c% C  [
   writel(temp, IO_ADDRESS(PTCMD_ADDR));% h4 ?% ]9 g- ?* D1 c. h% z# i
8 Q, m1 n; I5 ^5 i6 r6 _
   temp = 0x001FF201;; q3 d6 Z9 t0 s9 `
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
1 d/ `+ s7 n8 C* X# R   
5 Z9 p9 }! [- }. \# {$ Y! e: `   //PINMUX  
( l8 J+ g6 Q9 z3 \. r$ ]   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
1 H  @" J) M- H3 C2 V   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
! }& O2 z% D# T1 ?) z& k; d" t' h   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
! l7 V4 T) d$ R3 a) V$ o/ |( j   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
3 |) J7 x/ T3 [0 }% c2 {% j   8 c/ Y# w' N! U
   //SLEEP_EN,EPR,L138_SHK1,L138_RC7 Y' j$ ?7 }5 D! b# M7 b1 p3 \" Z
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  % k7 ^* T" V* O' \0 `) t
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
* B% y4 C- y& `! M   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
4 A% K6 M- A2 R- ] , a2 M' m: |: R/ G! l1 {4 _
   //RESETn,L138_SHK23 E$ G4 L9 E# @; {2 ^
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
7 A4 m) v1 k7 B" [  Q( b' v   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   9 e( m! I9 o% Y  B& `$ L
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
7 H& [, @: K; A: Z; F ; D8 ^7 w/ z2 T; L# `
! o0 H, a& h  B
  //SPCR Register8 \; H4 I, I* o; u; M3 W
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset  ]1 U4 o" C: E$ U
  temp = 0x03000000;//(DLB=0)
5 ~7 v8 r! D* k7 X  s4 I% V3 { // temp = 0x03008000;//(DLB=1)& ]* K/ c. c1 _
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
0 a9 @) t$ d; p- H  temp = readl(IO_ADDRESS(SPCR_ADDR));; p) O2 }7 g$ J
  printk("temp=%x\n",temp);
- D( J: f$ b" |8 x  m
0 d7 S3 S+ {: ?% Z' s( o2 @   //PCR Register
+ i* \# z: k, s: j+ x& c9 k' e( }   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
) G" z0 `: A! F6 L  // temp = 0x00000F0F;
4 c7 U1 V# _( Z  temp = 0x00000B0F;# `8 Y- }5 r3 x  m
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ' L" d1 {. W( ^7 T# B
  temp = readl(IO_ADDRESS(PCR_ADDR));( P$ S2 H! E9 b
  printk("temp=%x\n",temp);  % P* ^7 I% K) P8 ^# o9 V1 I' v
   //SRGR Register0 a8 d4 V/ L4 x- F5 g& Z4 D: G
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
! w. Z* H, }2 I% D //temp = 0x301F000B;, q* w3 T4 ?7 y1 ?9 m' {6 y) ], F
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
" b" B* r9 D6 v, s' V  temp = readl(IO_ADDRESS(SRGR_ADDR));
6 d/ X' |# \' J; k* w( ]  printk("temp=%x\n",temp);
! B) G. B$ R# o$ V( M* L) |. l" f   //RCR7 ~) n2 T0 L% D9 u
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
2 w8 _$ s/ {+ N) S, ]$ ^   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0: F6 G; U/ I! }8 r( Q5 H& v
   temp = 0x00440040;
/ J  E: `; D( ]- [& t- c* C; f; n* b   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
5 T, t% v& v2 N   temp = readl(IO_ADDRESS(RCR_ADDR));& I2 M8 _$ a* U+ ^+ f3 z- F- G1 g; y8 M
   printk("temp=%x\n",temp);+ o" B7 P2 L6 e; a2 N; G; ?6 S" k
   //XCR- i" {5 w$ B2 I+ F
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
8 N% G9 _" a. ^$ I4 Z7 E9 N   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0% n& d+ R; G, m8 P; n4 Z
   temp = 0x00440040;- R, @0 m8 S0 v7 i) @: {
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   $ d& u2 L% |9 |' T
   temp = readl(IO_ADDRESS(XCR_ADDR));
1 O% X" ?* l$ E   printk("temp=%x\n",temp);
5 b+ M5 |4 }! f+ L) ^) u  udelay(100);0 c# Y" X+ x% x, ]4 [  n3 X$ E
  //SPCR Register/ L% [' S8 ~% w
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-18 H0 {; `6 g. q
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
5 ^* s9 m5 e% D- T  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
& |$ g; S$ X6 w2 D  temp = readl(IO_ADDRESS(SPCR_ADDR));
# z2 _) p9 ?% ^+ `  printk("temp=%x\n",temp);5 i" J& F9 r! w2 ]: W# o
  udelay(100);
  ^# j2 h4 q/ A; K4 Y7 U/ L, h* @4 o. _1 X6 ]6 j8 w5 e
  //set GPIO direction5 s& D6 O6 X0 L+ a
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
7 ?" Z) l, c/ ^+ k& u2 s! R   temp = temp | 0x00000100;//EPR----input1 m: W/ }; ]' {
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output% m( h- {  h- @" K
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
( y. Z& q4 n0 ]" I5 l! J/ ^- G* r% E) Y ' E9 R3 ~2 O7 o
   return 0;5 e" X) a% l- S" d, s! n7 F
}8 z4 D9 X/ y  o1 E  y- T
static void __exit MCBSP_exit(void)* D0 Y1 n! _' p& X, W7 K' C! g
{% x% j- g9 |' e3 q3 z
   printk("mcbsp chrdev exit!\n");
0 Y; H$ ]! y9 q9 p2 ]) N  E4 n   cdev_del(mcbsp_cdev);
5 b* K7 ?- P4 t, m2 T& J4 @   unregister_chrdev_region(mcbsp_dev,count);3 k; u  V) P; F; O& i. a5 R
   device_destroy(mcbsp_class,mcbsp_dev);
) X* X% N; Q; k   class_destroy(mcbsp_class);  S4 i5 S  d" _/ x# X6 P
}2 u! p: R3 \9 H, {9 W
module_init(MCBSP_init);, \$ j8 O: [( ?2 f+ K! m# O
module_exit(MCBSP_exit);' q8 \9 V$ U2 D8 B3 D( H1 B
+ ^$ A4 _/ p; R) E
MODULE_LICENSE("GPL");
  Y7 K1 y6 G/ F+ Q, j2 P8 F8 `) Y: R3 G/ L9 d% J
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。& ^; ?$ D( s) p  E# }1 U9 D+ c
我的应用层的测试程序如下
" W3 v7 B" H9 Q1 R" [#include <stdio.h>
) ~  r3 x$ R" C1 N( q+ u#include <string.h>
* j4 J0 M2 Z8 ?( n* h- H#include <fcntl.h>& `& y" M3 x0 L* Y
#include <unistd.h>) m! n+ u& U0 q1 `# H' `0 x
#include <signal.h>$ _7 b& {/ Y; F. c' h3 j
#include <pthread.h>       //线程
5 J5 a1 w$ d& b7 S! @8 l& l/ i4 o( d, H#include <stdlib.h>4 h4 g4 Z. F  b; q" m# C: `. {
#include <pcap.h>          //捕获网口数据
  S; c, F/ x% L7 _, l+ ^#include <semaphore.h>     //信号8 P' Q# }8 }' H3 \
#include <sys/types.h>     //消息对列
1 w: r+ @4 Y& S, G7 ~: Z#include <sys/ipc.h>       //消息队列
. \: b- v/ V8 w( ]#include <sys/msg.h>       //消息队列: ~$ J$ f6 H5 N  f  g2 j: u6 I- r
#include <sys/select.h>: \# C( m8 V  q& n0 q) d- g
#include <sys/syscall.h>
' j' K. M9 L9 g1 e8 W9 Y#include <sys/stat.h>$ ]' F5 a7 L& E) g7 q
#include <sys/mman.h>
5 j. Y( L% O$ M" N#define msleep(x) usleep(1000*x)
( n( k) S, Y7 W3 e0 l
# d; g1 r1 U% H7 ~$ |; dint main()
4 `3 I2 e; T/ C, y$ O- R{ . u4 d1 p; N. B% v7 X
    //MCBSP,ARM与AMBE2000交互设备
, U6 c2 g; {( B  [4 K int fd;
8 s5 |* N4 c# v/ P; Z% p unsigned short data_write = 0x5555;
' r" x9 A* A+ B% _" ]# {2 H unsigned short data_read = 0x00;
, }9 \9 k1 J9 D  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);  g5 r7 b$ l% d, m
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
1 J' e$ Q1 Z9 s$ D" d! x    , x: c& Z& y/ O. e, R
  if(fd < 0)2 {! X7 m) Z) |! e* }
  {, T& T7 B5 s) @) p; s
     perror("open failed\n");
: m, a6 P. C/ ?# w     return -1;
6 i$ o+ V7 t. i5 E  }6 t3 a" T  i0 ?0 |" I8 g
  
2 F; {% X8 ^% d  while(1)
" |- J* M# N7 L( ?5 D* Q: |. K- a  {2 @. P$ r* u, p7 v
   
$ i, g0 X+ e3 z, |3 T5 Q   //AMBE2000每次读写是24个字为一帧
. F$ f& }$ A; w1 ~# F, [& f2 m   //写数据时将数据在底层存储起来,等到中断的时候再发送5 f4 P2 m, B+ v; r0 M
   //AMBE2000输入数据是以0x13EC开头的
! A  W* o% M/ K! }   write(fd,&data_write,sizeof(unsigned short));4 \! b. j2 q- X+ i9 f
   
& j+ [$ D# T7 w$ D3 b   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
; F+ S7 `* X% O* b   read(fd,&data_read,sizeof(unsigned short));# Q) V. Q* A- u' W! B; B& C8 \5 P0 s
   * n9 Y( m, x( T, Y
   if(data_read == 0x13Ec)
6 Q( `" J; {: N& E$ w2 `   {- p7 D) i8 @  Z, {; Q- ?  ^( ^
   
4 }1 N( i& V! F( k4 v9 V/ \" P    printf("data_read = %x\n",data_read);& l# \1 \; z3 k3 a
   }2 d9 S% z: H% w2 v; v
   1 u! r) \8 L$ A. [0 A
   msleep(10);, Q8 }! y6 ?* Z; f0 `
  
; v& L! C% _+ [0 q* R& }# u  /*
4 Q# |; S* J! o6 P0 j, h! w4 `* l   ioctl(fd,1);   ) |, Z* y; e. g  {6 Z- o! v0 @/ d
sleep(1);/ Z) h  n# t+ D" g
ioctl(fd,0);; W9 ?/ M. }) c% D: R, Y6 i
sleep(1);
" D* S5 y# M  Q6 D, N1 X */ " B* |3 b& g7 \  D- ]9 Y2 A
  }   
' R  N. \- C6 A' U0 e3 E5 K return 0;" P& |6 e9 E3 ]- }$ a1 C
/ _4 @& J3 N! c; V
}
& ?+ {5 Z8 E( s1 e4 s' L2 P  E; v+ _6 t9 q$ m
多谢各位指教,谢谢! 急
: D6 b/ I. \- @# b
' d& u) Q- i& m, ~" |! k
. Z/ L; o: A% c0 q. i+ a% J
1 a  ^& B6 U* j# V; Y" A) @
5 |0 g' ~' K' ]" |+ w4 ]8 W6 X2 Z; Q/ @0 C1 `% D/ P! q- s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 06:19 , Processed in 0.048404 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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