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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: % ?, Y7 o, s! u5 x" x. _# \
/*$ r: I% X; K! z3 |
* Copyright (C) 2009 Texas Instruments Inc+ x$ N- a3 A7 K5 _: a+ D$ z4 y  h
*
- b1 r  x, W9 {; d7 x) r * This program is free software; you can redistribute it and/or modify- J  s% `6 U" y- T
* it under the terms of the GNU General Public License as published by
9 X* m; U" L6 I7 {8 N$ L * the Free Software Foundation; either version 2 of the License, or
; @% i7 k( V0 z  Z( g; ~! i * (at your option)any later version.  I1 U9 U0 M7 h/ r3 C; J* d6 S
*
6 G& J5 z4 x+ N' \3 w2 W1 b0 J" ? * This program is distributed in the hope that it will be useful,
% X" ~. w0 }1 B: p5 s' p; T * but WITHOUT ANY WARRANTY; without even the implied warranty of
$ I4 A$ D$ y6 j( p * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 r% S8 @! [5 s' f. s1 H
* GNU General Public License for more details.
. r1 l# K# ?& s: F *) A+ g& P) Y# x3 I/ Y, F
* You should have received a copy of the GNU General Public License
- E( n7 p" g. q1 S" U * along with this program; if not, write to the Free Software/ S' M: a; Z4 A% [
* Foundati% A  e* P% U& N$ H
*/
* K: f! s- U; K1 Z#include <linux/module.h>
3 P' z0 i0 z0 v( v#include <linux/init.h>
- C  v6 w* D! L+ ?1 u#include <linux/errno.h>
/ `9 C# V* U: ^8 a1 F9 u6 T/ V#include <linux/types.h>3 O; c4 T* |$ l5 G1 |, o* A
#include <linux/interrupt.h>
3 n. o4 {6 C0 Z9 f+ b#include <linux/io.h>& A' W0 ]! b, w
#include <linux/sysctl.h>
( q9 n9 B2 p6 W7 g- O8 H) X#include <linux/mm.h>+ G9 f$ X% `/ t
#include <linux/delay.h>+ ^. E5 g' L0 Q3 {$ ^
#include<linux/kernel.h>
. F6 }& p6 {/ z( I" Y2 a#include<linux/fs.h>% M  J) n8 H9 g& L
#include<linux/ioctl.h>7 f) N+ s* {1 z3 V# Z( y! x* t
#include<linux/cdev.h>
- S6 M1 H: n6 m- ]- r, f" |#include<linux/kdev_t.h>
( i: S" i3 Y, X, i#include<linux/gpio.h>% [/ X! Z5 g1 y* F" l
#include <mach/hardware.h>7 L" G  U* C: M" s! o) J8 \& n
#include <mach/irqs.h>1 x* `6 p3 ~, \3 f/ ~3 I" \* k
6 t" C4 s) ~4 @
#include <asm/mach-types.h>
, f* d7 ~9 ~% u) q/ w#include <asm/mach/arch.h>
6 u$ ^4 S- l8 e" u& }. R! J' z$ R* q#include <mach/da8xx.h>
) u" [9 t0 q- f# t! E#define  SYSCFG_BASE   0x01c14000& F6 z- X& ?: Q& S4 L3 V& J
#define  PINMUX1_OFFSET   0x124
+ ]: j% i" d% u( Q#define  PINMUX18_OFFSET  0x168
/ q+ p8 x  _( J/ |: r#define  PINMUX19_OFFSET  0x16c2 H  G5 C8 O# a+ U) `
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
  T+ |+ c% `) z) F. ]2 g0 m#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR3 _8 l$ d  B. t& @# l: Z
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR9 B) N3 N) i0 O
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
2 b9 Q0 x1 x, \& C#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR# _. E$ u' d7 N0 i; w
                           
$ a% x3 ^# l0 V( n5 B  J) X#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
: m/ \7 d3 k9 T4 I/ c* e- p1 B8 x#define DRR_ADDR      0x01D11000  //MCBSP1_DRR# J& g6 h) r% s' V, ^
//PSC: K$ t( o* G2 Y4 k2 N' v
#define  PTCMD_ADDR   0x01E27120  
( K  Z" Y/ G- L/ l$ L4 _) Y#define  MDCTL15_ADDR 0x01E27A3C/ d0 V5 ^; w9 B9 `8 ^+ U6 @
#define  PDCTL1_ADDR  0x01E27304
0 ~& ?, z+ P6 t- x# m; m- p//GPIO8 direction
" B: k* s/ [" T5 v#define GPIO8_DIRECT  0x01E260B0
& z, w" V6 p6 `* g#define GPIO8_OUT     0x01E260B4
% e& y. j8 F( q+ G: p! k1 ]#define GPIO8_IN     0x01E260C02 S7 D) ^* I0 j8 f% H% M) C

% F+ ~  W4 V  x3 K; t! u//#define MCBSP1_RINT    99              & s7 T$ p, H  r9 z+ w
//#define MCBSP1_XINT    100  $ \) A# b! g9 e5 O
static int MCBSP_MAJOR=239;- X) q% V5 ]# S+ b
static int MCBSP_MINOR=0;
# k1 l9 @  S* `# D$ u8 S! ^  istatic int count =1;& `' ?- A( r1 ]. u! C$ D5 y
& c+ z6 b& V2 H
#define MCBSP_NAME  "MCBSP-device"# L: M! e# W7 T4 u2 X
+ E( g/ I# C- w/ I
static struct cdev *mcbsp_cdev;8 B- u) t+ |5 ~% w0 L& J/ z6 d
static struct class *mcbsp_class;
( _$ p% I7 {: B8 ]4 Sstatic dev_t mcbsp_dev;* p+ D0 F& c# d+ y8 v
unsigned int DRR_data;4 j7 u+ x4 P: P% ?" ~* \9 |
unsigned int DXR_data;
& a" q# z1 }4 f" ^" w+ W, a) Vstatic int mcbsp_open(struct inode *inode,struct file *file)
- p9 F+ n& y6 k; G3 w- P{
/ x: u$ f& O' C; L& p. K   
  w: J$ F  b! G   //interrupt enable,initialized6 `: ?4 T1 x" m; ^/ e5 P% Y
   unsigned int temp;$ j- R7 f3 P& B( R& p7 I
   //SLEEP_EN(GPIO8[10])---0
. C4 r0 k' ^: V; |; @5 _   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));. p3 O- V1 j: u6 S
   temp=temp&(~0x00000400);
& I. ]% Y8 @" w" H   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]: L' ^. d( V2 z8 J5 y5 Z$ G3 i
  //RESETn(GPIO8[8])----0----1
) @; W3 T! z/ y   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% j- y# q1 Z2 B! [' K6 H
   temp=temp&(~0x00000100);+ X+ q- j% z( V1 [
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---02 I" m; p% [3 n! D  @" n7 S) T
   udelay(100);( d4 j) N, R6 @4 e, {5 R
   temp=temp| 0x00000100;( c1 |/ _: b4 v- R
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
6 m" F% h$ [! N' F% F. c   udelay(100);
) w, C# r' K4 J/ v   printk("open success!\n");7 u! A; C; Z) p
   return 0;
" \9 G/ y7 L, U. G/ F; O/ x}
8 u- F( @6 |6 z+ B% b! O5 U- M1 ?0 |5 T8 M6 R' c% b8 {7 _
static int mcbsp_release(struct inode *inode,struct file *file)
& t; @: q9 {5 l{
. R$ s) b+ [' e4 C* e   printk("release success!\n");$ n! w, r) \% I- o
   return 0;
  Q% h8 s6 j' {}$ M2 I: c! t  V& E

: p- Y2 h1 m( S) |2 G0 t& fstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)! s* \1 E( v  g- c
{
7 ~2 z. w) x7 H$ b    copy_from_user(&DXR_data,buf,len);
6 k5 p  M9 ^- F: B    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       3 z7 \/ l* K: y5 p
    return 0;
2 y# }8 G* u' y: h) e# s7 [
& F  [  V. i9 e5 {9 q}
# ^8 M2 ^. S! `- z* Z+ p: o: V
! b; ^% }2 D1 D+ g5 v2 J0 l- ystatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off). B  B9 z  r" z4 H
{
+ Z: X2 I. N+ C: W+ G   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
5 }' E9 \! j( a  o9 U) P   copy_to_user(buf,&DRR_data,len); + k" n2 P. b: h9 D. u% f' W
   return 0;7 |/ v2 C: q4 D' h2 K# o9 `
}1 w% `% z" I# @! ^7 X

; v8 A" T2 c! d+ z
5 m2 x3 P& N. ~static struct  file_operations mcbsp_fops=
" D  Y% s, [" Z" I0 \; r{6 q: k6 p2 r4 k9 A" @4 `# A; H' [
   .owner=THIS_MODULE,+ D" {' ~8 ^; `9 k" t0 f
   .open=mcbsp_open,
7 Q& z0 @( W( z   .release=mcbsp_release,
4 G& l4 e# J  F  X! V   .write=mcbsp_write,' ], U( H, [. R" S
   .read=mcbsp_read,  u: N% U; T- T' U0 w
};
* {  U% @; j! Q' n8 _; astatic int __init MCBSP_init(void)
+ E8 ^& H/ ]9 L{
) k4 I7 ~, j$ @8 o1 P$ ?   int ret;5 o% N' @$ ~% v, y' w. e1 L0 V1 H
   unsigned  int   PINMUX1_REG_old;3 U7 k' ^8 H3 l' Q
   unsigned  int   PINMUX18_REG_old;4 t8 `$ O! `3 Y4 p
   unsigned  int   PINMUX19_REG_old;- W' s9 m& p6 D, C4 G
   unsigned  int   temp;  
; s3 ^( ]1 y& y* k; u: x5 p   if(MCBSP_MAJOR)7 V, {3 L4 B- Q( i1 t. ]/ Q
   {
* ~- ~! }- M0 v' X+ m      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);* m% u' s) |0 V  Z3 S- z
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
9 ]0 ~' z( F6 ~  l5 \9 H: B   }
, Q% b7 Q2 w: b7 Z9 k   else4 j- a* g) N9 v8 a) n
   {, }, `+ b+ I8 Z; h: N! V" M
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
$ F, {0 l0 L- y. m1 \      MCBSP_MAJOR=MAJOR(mcbsp_dev);
8 K( H( F6 X/ R. r( y   }
9 X- F6 t1 c$ k4 U' o6 W3 x   
* e( _7 f0 K2 |   if(ret<0)
: k. d, s9 J9 N8 [. M" Q   {
& z) b" A" q: f$ E+ F0 ^& d      printk(KERN_ERR "register chrdev fail!");
! y) S; q$ c2 t+ S8 T& G' g6 ~      return -1;7 l$ R8 s% P" p" a9 N; f  t
   }0 M% M$ Q9 \$ Z7 [( q/ v
   : g) f% `& m* K" |; }& e
   mcbsp_cdev=cdev_alloc();
1 X! X' W4 u, [& D( h   2 H9 L: d* l, k" t6 u" d
   if(mcbsp_cdev!=NULL)
8 a. E5 I) A4 R   {( g# e: @. @* r! Q3 g3 S: L
      cdev_init(mcbsp_cdev,&mcbsp_fops);
8 J8 _  D# Q6 V& D4 A/ q4 u4 y# E* c      mcbsp_cdev->ops=&mcbsp_fops;
1 j" n9 y; R$ y+ g( _      mcbsp_cdev->owner=THIS_MODULE;) Q2 R* Z# k1 ^) ]
      
3 K4 _! ^4 S% u      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
: l: g" m% B5 v          printk(KERN_ERR "register cdev fail!");
& x0 E, |/ f7 b5 ^% @2 V      else
+ G3 y/ x- N% z  g% b          printk(KERN_ERR "register success!\n");
2 o9 C% Z3 T3 I( j   }
$ O$ V' d# @$ T" a% B3 y& X( p   else- Y! \9 b- j' G
   {, e+ r) A" y4 u' H# y  K7 a
      printk(KERN_ERR "register cdev err!");
0 T+ q1 A( l$ I& f1 H6 `      return -1;) I" ]: R: ], a. y' k) A. k# i
   }
8 r' B5 x5 C, c   5 T4 K* n+ Q1 k; e1 K
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
0 o4 `5 [0 G( q/ Q. ~- U   if(IS_ERR(mcbsp_class)): y* x# E/ g& \% a- o$ J- @. R
   {
4 {) F- v8 v" L0 i4 o0 W      printk(KERN_ERR "register class err!");
1 e2 x3 n; b" Q0 _( j3 Y   return -1;0 o% n1 U& M1 ]
   }% h5 P) g* g3 G- l$ P: c. }
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);! Q: q$ n% M9 M+ P- B  }" J

' P) D  Y: r1 u' g  x$ c: [   //PSC$ Y& n+ {) S( `, G
   //add Enable MCBSP
# L) _, _) ?, Y4 l2 h9 N; u2 e2 p$ u: J   //test
! \1 O8 j  C' w8 @  |# x' t+ r   temp = 0x80000003;( C+ m' A' n7 {/ y
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));/ L# n/ S9 \- r7 G: q1 f
   temp = 0x00000003;0 F8 G8 t; f8 x, k
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
5 P3 q* z( Z# f9 T# Z9 H* m7 S   o# \& _9 G& B3 C7 V( D
   temp = 0x001FF201;
3 \. c$ A0 m  y0 b1 f" Q- b% c( Q( l" M   writel(temp, IO_ADDRESS(PDCTL1_ADDR));6 L' K4 a2 \0 y3 h/ ~) s) O3 s
   , v' Q+ q* [$ h" s! |
   //PINMUX  
1 t  m/ {) \' A; `8 A   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
8 H0 d+ a( R7 \   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  ( ?% P( l! h" X) u5 t+ a* {$ f) W: N
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
4 k4 s5 l0 _% K9 D$ e) k! x   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);$ M$ o$ u( M. H% q+ F* s
   
- j* Z$ i) B0 m- c   //SLEEP_EN,EPR,L138_SHK1,L138_RC2 @4 W% B: n6 L' N5 u
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  . _" j0 u+ P; j. ^5 q2 i
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
; ~5 P' R: K; `2 p2 E# q& ^   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);) Y. g7 R% h3 O  I9 @* b5 x

, N" P( i9 _& g# H9 W   //RESETn,L138_SHK26 Z8 ?4 ?! B2 _7 l$ M
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  / D3 S2 X: d4 d6 R. E/ R
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
' Z  C2 H9 k; S7 |( X* U   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);' v! r  ?/ N/ p, ^

1 c$ f4 b$ [8 D& K8 n2 N
2 C& c& m$ ^# }0 x  //SPCR Register
3 N( w% G9 _# {1 l  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset9 n) h4 G  p+ U5 k! C: N4 Z
  temp = 0x03000000;//(DLB=0)% G& ]' B" c4 Y/ F# z9 E  x
// temp = 0x03008000;//(DLB=1)4 M8 ~, P0 T! M6 l/ B
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset1 [" s) R$ ^7 A/ A1 q5 w
  temp = readl(IO_ADDRESS(SPCR_ADDR));
/ N" F% b) b% `! ]  printk("temp=%x\n",temp);+ p$ @( s' H, s, @) }
: f  Y/ m$ m! ]  x7 M8 w- a
   //PCR Register
3 t; r" h5 E8 K; n$ E$ g   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0) @! o' v( s/ n- Z3 C9 K
  // temp = 0x00000F0F;& B8 `; e% c4 z
  temp = 0x00000B0F;$ u2 d! K* V& G, g8 a/ Z
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ' `1 d+ T. U( M
  temp = readl(IO_ADDRESS(PCR_ADDR));
. L: r' m4 P9 }- w  printk("temp=%x\n",temp);  ; J7 z" E' W6 c" s+ H* a
   //SRGR Register% ~& X/ o- p3 n  Y
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11. T/ p' n6 Z8 W& L- U4 h
//temp = 0x301F000B;
' Z  T3 [* \0 F5 X# |   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ) e7 I3 z: j2 Y2 N: K  p( l
  temp = readl(IO_ADDRESS(SRGR_ADDR));
" `. A4 s3 B8 D: `- h8 M  printk("temp=%x\n",temp);
+ P5 o- [( f7 P* z8 @   //RCR
" `% c: A4 @2 v0 k5 }4 \   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,) M/ d5 s: T: q: t
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
& W2 W6 O* O/ R5 |   temp = 0x00440040;0 B  I9 t$ s  Q/ ]/ q
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   , ?+ p2 b' d: _) K( v
   temp = readl(IO_ADDRESS(RCR_ADDR));
! D$ m# l( _9 F5 b# q! F   printk("temp=%x\n",temp);+ I' R$ N- h1 P& X, V6 R# z& N
   //XCR. b$ H4 Q0 r4 G
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
) `6 Q% q* X2 x8 u( d   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-04 t/ r4 a$ |% {% V- F
   temp = 0x00440040;
( C. Y7 F4 }$ |: ^   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
, `" ]5 L% d, Z; S+ z0 i   temp = readl(IO_ADDRESS(XCR_ADDR));
& E$ N; m& k# C: B, x3 A   printk("temp=%x\n",temp);
0 i. N$ K: S2 o) \; t. t, b  ~  udelay(100);
; D( p( d! ?4 _4 r. p; O  //SPCR Register. I' q- d: F) l, P! q! A
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1- M) d0 Z/ Z% O0 E
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
+ S, m) t' g7 ^8 G7 ]( d  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
. F: E9 |" Y7 z9 N) v. w7 p+ ^) b  temp = readl(IO_ADDRESS(SPCR_ADDR));
1 o' x$ R5 i" |7 ^' \8 ?  printk("temp=%x\n",temp);
7 F9 j+ y! o# r! S; J& C/ D4 X: ^7 a  udelay(100);; D& o3 k9 b. ~  n' A8 O
# @6 D0 J; |- y3 H& o, j
  //set GPIO direction' E0 I: w8 g$ q) {
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));9 S1 B7 a( j2 O. t
   temp = temp | 0x00000100;//EPR----input) v. f3 N% r4 B# W+ k, [9 |( i" \
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output) `6 T, w8 S% |* @% [( Z
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ' P7 j3 ~) i8 \6 F3 ?! _

. E3 E8 {$ i! X5 U7 @2 J   return 0;
* Q+ i* V; D% }/ N# w. t* U}9 \) ?, i$ s/ z* @2 o" b
static void __exit MCBSP_exit(void)7 u' D. B& `5 E. f% t2 f- i* Z8 H! B! O1 F
{
) T7 I+ M. `$ r0 y   printk("mcbsp chrdev exit!\n");
, r- v0 ]7 V) p7 O   cdev_del(mcbsp_cdev);' i( I) V2 w/ b. V0 B1 N' H
   unregister_chrdev_region(mcbsp_dev,count);
# U; p1 e. o# W   device_destroy(mcbsp_class,mcbsp_dev);5 P* [1 a1 m1 ]6 I9 i9 h& S/ Y
   class_destroy(mcbsp_class);# K. k6 Z+ Z$ |9 r, k& |) e9 a' [6 Q
}. H/ H. Y; l! V6 E' F& F' q6 d9 e
module_init(MCBSP_init);
9 b1 P+ i/ ~  L7 H7 h! L$ [module_exit(MCBSP_exit);7 n5 m6 N( {1 j2 y! y& i/ H  ?1 @
, b: r: Q+ |. w3 Y
MODULE_LICENSE("GPL");
. M1 u9 Z( l+ D3 w* ]. G
! B# n$ r5 H+ w* c- H. E我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。/ C; ~9 m- Y" `
我的应用层的测试程序如下
' J" _8 Z+ H5 E) ?#include <stdio.h>
. M  R! z9 D3 u" S  B#include <string.h>
1 s' u) M3 g) \#include <fcntl.h>6 _, N# _3 s5 P7 q
#include <unistd.h># G5 u  }/ ]0 t- k$ _
#include <signal.h>1 m8 p9 Q# t/ O5 |+ ]: J/ o
#include <pthread.h>       //线程
$ \" z4 |2 F' Y" h#include <stdlib.h>& P, G6 k7 M- B1 C8 s: D# l5 Y
#include <pcap.h>          //捕获网口数据
' l& A, r5 \' ]% B' C6 t! m#include <semaphore.h>     //信号
! A4 Y+ w) d0 i% p#include <sys/types.h>     //消息对列( _+ M- B- s" q! [' m8 j
#include <sys/ipc.h>       //消息队列
' i2 \. ~. @0 Y1 Y& x% {" m, B- [#include <sys/msg.h>       //消息队列  \8 }/ w8 U2 x. f2 Y
#include <sys/select.h>1 b+ [7 j" H& i" a9 M& M
#include <sys/syscall.h>6 w6 _6 p/ Q- d* x6 q
#include <sys/stat.h>
/ \  x4 i$ u: G/ f' t#include <sys/mman.h>
1 H! B3 A0 _' z- L#define msleep(x) usleep(1000*x)
, g9 n# R6 G7 n# I# W, U' B% U  v6 \4 k; H, k( \/ N( P( k- c" O
int main()
8 w) j  y( L5 J5 C2 a{
! X- |+ |# v+ U9 u. _# ^6 |    //MCBSP,ARM与AMBE2000交互设备
1 I7 p( v, Z8 S/ Y int fd;/ \) w& z1 b% c/ Z0 w. c7 }
unsigned short data_write = 0x5555;
- J# y) V2 t9 i0 B& X! c- P) i) E unsigned short data_read = 0x00;
( S! b( Q9 z, ~, I3 }9 o  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
, Q1 E. L# C/ b //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
' Y  i* ?/ J: E/ H! p9 [+ I    0 {, R9 S% Y+ O0 s& [
  if(fd < 0)
* l6 s0 R/ h5 R: f0 |  {
3 s" x$ t+ O3 d! J7 w* |     perror("open failed\n");8 o% a+ X; Q; b6 r& g
     return -1;. O- M  Y: }2 S
  }$ {6 I9 ?- _) \# ]$ H1 Y7 C2 h
  
! Z! F* F8 c; v) `# K  while(1)4 D- \3 H  x4 m% n, [% h
  {5 n) `; Y% B" n; a2 k
   
  q: O$ T$ u) r. z" q* o, i9 o   //AMBE2000每次读写是24个字为一帧
& C7 F$ Z( p1 {' O) P1 Y   //写数据时将数据在底层存储起来,等到中断的时候再发送# P* |0 i! @8 ~6 x
   //AMBE2000输入数据是以0x13EC开头的
/ F9 h1 \* p, k- `   write(fd,&data_write,sizeof(unsigned short));3 K5 Z% i4 V, Y: A" I" f
   9 D  |& ~- u" `$ T- o0 D; e
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
& F7 X8 G8 u3 c3 h% Z8 ?6 \   read(fd,&data_read,sizeof(unsigned short));" W. k5 a2 \& @6 n; \' t
   5 i! Q3 g5 k6 g. E& Y% U2 m( v) l
   if(data_read == 0x13Ec)
1 u% {2 x& K; w   {3 H' K( L3 x$ H) D* ]* h
   % p8 P; @$ X2 x0 Z' j* ]
    printf("data_read = %x\n",data_read);
1 f) F7 n( s5 V  N3 L* S   }
8 h  e% h: b, N* |) _; |/ Q% B% s6 p   ' E+ V' `# q# l0 }
   msleep(10);
+ u3 ~5 O- I+ [  
" h$ d% U% M/ \  A9 B  /*
% H# s% R/ {. m   ioctl(fd,1);   . Q) B; Q, l1 f# `/ e+ Y$ ?, x
sleep(1);
! d* J1 x: E2 ~9 X, q5 b ioctl(fd,0);; p8 _: H! S% g# \
sleep(1);; F& t- k0 q$ ]& J4 b5 X! D4 b
*/ " f8 E: I7 H/ K  a, ]! t8 J
  }   
2 o: q3 e% N  t+ k6 t, G" z4 f" |6 c return 0;- y$ m# s' V  U, L5 k1 }' d
6 J4 ^& F# y( j0 ?+ [4 ~' Q+ z
}
9 |! k6 O; }$ _
7 u1 M2 P6 m: }) d) h8 e, q' M多谢各位指教,谢谢! 急
3 g; O* L# x  I- @- h7 @2 V2 i5 `: ]- D
& ]8 S: j) Q- Z4 C/ t6 M

6 }4 d, S9 {) T0 _, D  G+ z# K9 |5 b, F' z$ f2 Q6 ]
. X/ M) r4 z4 Z. S" C4 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-6 09:41 , Processed in 0.046213 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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