McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
9 E! x: g8 J0 D: e2 J, S2 S0 n/*5 {6 P/ L5 T1 y1 K" q
* Copyright (C) 2009 Texas Instruments Inc& ~1 X8 C, Y( i
*1 m* M, l" i) G  S: Q$ c
* This program is free software; you can redistribute it and/or modify
2 ?( l. [9 d3 C* B- y * it under the terms of the GNU General Public License as published by5 G; `( x. C1 {+ G( t
* the Free Software Foundation; either version 2 of the License, or
+ K0 I3 j  x: y  | * (at your option)any later version.* w6 v6 c2 v5 b8 F, V, i
*
: P! A8 P4 b+ j- w7 a% J * This program is distributed in the hope that it will be useful,. S0 O, N/ w& X8 s) C1 M2 H
* but WITHOUT ANY WARRANTY; without even the implied warranty of
# P3 b- F; x. `2 N+ d, }8 z7 r * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 g6 ^7 s! d6 m* X7 B% t9 D
* GNU General Public License for more details.' o, g' I# J( F' {9 k# J% N0 Z
*8 ^( K! z7 U" c. v8 F
* You should have received a copy of the GNU General Public License
1 D! l9 w, W/ M * along with this program; if not, write to the Free Software. r5 r1 z: H5 B5 g4 F
* Foundati9 G3 `& {/ G; E; E4 b0 [" Z, W
*/# k- n2 S/ c2 p, C5 D, r3 g
#include <linux/module.h>$ t9 j3 u# d8 M5 |$ D, P
#include <linux/init.h>2 |& ^5 E% M  e* R" q1 ?& f, d
#include <linux/errno.h>& \6 b7 B" X0 I- d# s
#include <linux/types.h>
5 }0 R9 ^& J: }+ o9 }#include <linux/interrupt.h>- o, y9 h' D1 N, d$ Y0 g5 D% ?! Q
#include <linux/io.h>' K& }) t8 ?) v% A
#include <linux/sysctl.h>
3 f. s$ T2 E3 n#include <linux/mm.h># p) A, Q" P+ U. _
#include <linux/delay.h>
, M* C! b5 s; G; E. D3 ?$ a% |#include<linux/kernel.h>
) J* o$ x! ^% \#include<linux/fs.h>
* S# c8 N/ \! K- W#include<linux/ioctl.h>" A0 G, T9 ?! Y0 ?  L
#include<linux/cdev.h>, j" x, P+ Z$ X3 c
#include<linux/kdev_t.h>0 V' m8 g4 N% \# r
#include<linux/gpio.h>- G" D# n! u( Z( P
#include <mach/hardware.h>
) e) z" O- T. C  g' f7 H' k6 {0 J- D1 B#include <mach/irqs.h>
2 ^1 H9 U7 H7 Z0 @3 X3 Y- j6 s9 X' B' ^
#include <asm/mach-types.h>
  X( P0 P- y2 w9 `' }, {- M#include <asm/mach/arch.h>
- e2 R* |; V) i1 c" m#include <mach/da8xx.h>
2 w! H+ M7 k- P9 P* t  V5 X, e2 A8 z#define  SYSCFG_BASE   0x01c14000
1 f# A7 f! F7 L, ]- f# w#define  PINMUX1_OFFSET   0x124
( N$ y* H$ _& e# Z% j#define  PINMUX18_OFFSET  0x168 . b" |: a: W) r4 u, S- p
#define  PINMUX19_OFFSET  0x16c$ V: p0 O2 m" s7 d- }9 W1 M
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR& C8 J' Y, M3 e4 t
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
) c# @- y2 b) A' b; b& J" s#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
. M8 f1 B: g* }: [- ~: }# p; g8 H#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR5 j& C: q+ s' Z5 e
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR6 O* \. J3 ]* M3 {+ y8 A
                           
& D+ {- H. N5 R* ], t. V( Q#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
9 `, r+ C" z  V9 h3 a#define DRR_ADDR      0x01D11000  //MCBSP1_DRR4 z; x! Q& I9 \
//PSC: \( I8 j2 f, v/ u' \# B  s
#define  PTCMD_ADDR   0x01E27120  3 X4 U5 N; K8 |0 \  r
#define  MDCTL15_ADDR 0x01E27A3C
; f! g0 c9 I- |2 k- d; L) g#define  PDCTL1_ADDR  0x01E27304  ?0 c) n! T& O: [" ]
//GPIO8 direction, _( Q( l" E; l. @5 t- Z6 H8 D4 D
#define GPIO8_DIRECT  0x01E260B0
3 e' B1 l- P" G! k" Q#define GPIO8_OUT     0x01E260B4
6 e: w2 L- T4 o#define GPIO8_IN     0x01E260C0
- A  \* W9 u: y2 H% R5 M% U" |) G# C
//#define MCBSP1_RINT    99              % ^5 C+ |! \9 Y/ U) J% @7 m( k
//#define MCBSP1_XINT    100  2 a9 b1 u1 w+ a5 f
static int MCBSP_MAJOR=239;
0 Q4 M. M- f- b  R3 n+ v  p4 Nstatic int MCBSP_MINOR=0;- _: N$ H. V9 W) m
static int count =1;! r/ m" I* U. Y6 T, b' s
( k2 W' m: g6 n6 H$ z
#define MCBSP_NAME  "MCBSP-device"
( u* @8 t2 r! K( h8 A0 F8 Y: g$ o1 o# u! D) s* n$ G' |9 L4 l
static struct cdev *mcbsp_cdev;9 x5 P8 p& e8 R
static struct class *mcbsp_class;( ]& @! R$ J5 |) W2 s
static dev_t mcbsp_dev;/ }+ `" f- H4 Z. }, [9 p* q! [0 ~
unsigned int DRR_data;
$ [1 v% _& ^! q  d: [, w2 Lunsigned int DXR_data;+ T9 _/ M. M$ j  }7 {8 i  M
static int mcbsp_open(struct inode *inode,struct file *file)7 u1 T5 j2 S' K
{2 C8 o8 V# f: k% g6 Z9 j
   ; q, l0 S4 y( u% r( X& O
   //interrupt enable,initialized  i! R- o% k% u2 K/ M4 S' v3 Y
   unsigned int temp;
4 i+ l: F; g  c, J& n& _1 L# [   //SLEEP_EN(GPIO8[10])---0
3 |, @* l# ?) ]8 P   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));! U: G  i7 H7 B3 y; \( E
   temp=temp&(~0x00000400);  X$ S/ C0 `* y5 B3 _
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]3 l3 r+ S8 A$ e5 W
  //RESETn(GPIO8[8])----0----1. R6 F5 u" D( a" u7 L  |7 Z
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));9 J' Z# a) I3 [
   temp=temp&(~0x00000100);
: R  G& P$ A+ i# k' B   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
  X; i, X6 J3 [5 Q   udelay(100);4 o4 y4 A0 T; u% g; _, P) Y
   temp=temp| 0x00000100;
# p: B3 l' _$ m7 b+ B   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
: d+ Y" b0 {1 T: s   udelay(100);
! R4 y) c/ k3 @- K: Z& g9 O   printk("open success!\n");) s4 P$ D4 f3 A9 K! X
   return 0;
2 Y1 X( L+ ~. H; @}
3 z4 c" v: v) i$ O4 N; N1 C. |& A9 g" u* p! D- L8 C: T) `
static int mcbsp_release(struct inode *inode,struct file *file)
& H. y) T( B; P2 G0 b8 }6 Q{
1 [2 _# m3 I. p* d; u* M' z   printk("release success!\n");" e9 j- v& D/ i
   return 0;2 i2 ~( @7 a& ~# j; H
}
3 @6 o' U/ b3 T- `- L
# R" k6 c% ?/ k' k1 {static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)* U7 y8 m! x4 ], S
{+ t3 a" }2 |" C6 E8 C: X6 f
    copy_from_user(&DXR_data,buf,len);! W2 f. n3 z  M) H3 ?6 @2 G
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       9 T' z/ q& W' d1 ?" c
    return 0;
. ]! A/ |% c( I/ W
: Y; a- D0 w- O+ ~+ m! E}! ~# `; H& R4 A. `* M9 L

, q0 h8 Z" N% ]- H, Nstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)* u$ c; [* p" C3 f" B
{
: X, H1 i+ k6 [3 b   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));0 w: ?9 V- ^) j' Y
   copy_to_user(buf,&DRR_data,len);
: [% J) Q: t$ W) x* K/ y: u5 z   return 0;
6 t! B4 k! b: e( R}
' w6 G( c1 }5 [/ B" _6 g
/ w1 o: z( l5 V0 P& p  w) R* b1 [& g  z" X( t- k; S  W
static struct  file_operations mcbsp_fops=" N1 A' w9 T( K  R
{1 U4 h+ P. L7 d
   .owner=THIS_MODULE,/ v+ w. C% N) W# M4 d0 p0 G
   .open=mcbsp_open,! t5 Z6 ^; j4 y% r
   .release=mcbsp_release,
! y* c& B1 F- i. v   .write=mcbsp_write,) ^1 F4 n7 R' _; }! h# z
   .read=mcbsp_read," d% Y9 e+ m( ?
};" O. E; [: K+ v. b9 d) n: C) G/ p
static int __init MCBSP_init(void)
/ y5 M: r! V+ h{9 t( O# l! [9 ^( n2 e3 M& u5 A
   int ret;& i  M5 E5 w1 \6 ^4 f
   unsigned  int   PINMUX1_REG_old;. H1 M4 S7 f  e, `$ S
   unsigned  int   PINMUX18_REG_old;
& d+ q) v2 W8 ~3 B1 R. e; @   unsigned  int   PINMUX19_REG_old;
  d. U- i& U: J' i   unsigned  int   temp;    `1 f6 c' k  X6 D
   if(MCBSP_MAJOR)" c0 w* ?2 H! z2 H
   {+ _5 I5 X4 i8 H, h: j
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
: _+ ]' l7 a' e' v% ~1 H! E      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
2 k1 v! |$ _0 W" ?# @$ t   }# G2 R6 J% R3 G5 x% z
   else, f+ y! b5 L8 ]+ w, R5 u
   {, e( j; P# d; J1 ]
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
& x+ ]$ H1 W- [$ @      MCBSP_MAJOR=MAJOR(mcbsp_dev);
$ n) J% j2 ~1 |  ?1 ]   }2 s! I2 t1 O0 c1 i- c5 X0 l4 l$ X
   / M& G9 N1 N* G, I
   if(ret<0)
: \0 w) N' A. r' E" }   {
; `" b. T7 A1 F& U; r      printk(KERN_ERR "register chrdev fail!");& ~; }9 O. l. a8 V( _4 B5 s
      return -1;/ i( ^2 ?/ e5 R  Z- C
   }. t- w) z7 t# D
   * c4 `1 x7 s- i  Y6 A. H" l
   mcbsp_cdev=cdev_alloc();4 j0 h* O& l" J
   " D3 \' {# H7 U) }1 ?( p
   if(mcbsp_cdev!=NULL)5 J$ E% m1 y' y# ~, y  C
   {" U! d- `' c9 f0 Q
      cdev_init(mcbsp_cdev,&mcbsp_fops);
3 b% y# s. z- g      mcbsp_cdev->ops=&mcbsp_fops;8 Z6 F" Y( x) x7 P. D) ^! {- {4 d0 T
      mcbsp_cdev->owner=THIS_MODULE;, m) d, q7 }$ I" e
      ) i; {" A) Q- l" M  L+ z: P+ Y
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
8 |$ [+ a- {+ U3 S0 d) M7 c          printk(KERN_ERR "register cdev fail!");( w$ t/ ~+ B8 \/ ^& F' J6 @
      else# f. f! Z  f& L2 J2 |% ~, Q
          printk(KERN_ERR "register success!\n");; i" Y0 j- o* l# c5 t
   }
. t9 C- @7 b+ |/ _   else) V% N$ ^, q& J
   {
$ V  w, Y. M! `2 j# X      printk(KERN_ERR "register cdev err!");
3 W6 z! n" k: `3 n0 F* X3 u" [) O      return -1;
) T9 K: M9 X2 g8 E! s   }" E4 I; r  ]. H  t" p7 i
   2 T$ W8 T$ f6 ?6 {6 a/ \* E7 x) u
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);$ W! x8 b, F! G4 u9 @- r# o
   if(IS_ERR(mcbsp_class))
4 \3 O- h* E' f' T3 m   {
7 ?. E) ?, A& Z; E. ^' E      printk(KERN_ERR "register class err!");
- K4 i2 [7 a8 v) Q$ e6 F   return -1;
" L: G5 C/ m( N! L$ I   }7 F) B" h  |' E, q2 r. i
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);$ |( b( k, @, h9 X5 v

( t7 C) i4 i! D; G+ W2 q   //PSC
( s( I6 p7 Q- S! |: p$ K   //add Enable MCBSP
+ C' L9 z  j6 p/ O) I   //test5 u. P0 z( l, r& x6 J6 s
   temp = 0x80000003;
3 F. L) J" [9 K9 I$ x* R1 ^/ R* i   writel(temp, IO_ADDRESS(MDCTL15_ADDR));9 \! f/ K9 H* E& Q4 [# M
   temp = 0x00000003;
. ]& O- l1 g: K+ _   writel(temp, IO_ADDRESS(PTCMD_ADDR));' N  Y. \4 j# F- h0 P) u

/ V  `7 d# x/ h! X( f( K3 R   temp = 0x001FF201;8 J4 _6 n# |6 H
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));( m+ q* N# Q7 z; k/ f
   6 G, h5 J' _' q. X8 s3 D  e
   //PINMUX  0 d2 ~% i- e! Z) [
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,4 I% ?3 q+ s) l- e$ {1 m
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  5 U; F( z& j# }
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
' `5 Z/ W* Z; @- X# ?- `% b   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);9 f2 H; C- p9 f2 e2 l$ x
   * W6 K* d- u5 n4 v! j. W
   //SLEEP_EN,EPR,L138_SHK1,L138_RC  Q3 \+ R" W' }0 G1 n8 ]
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
" k3 M, |5 J2 v0 Z/ D. Y9 N5 p4 e   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
2 T; ^* y, X. G. b. |& Q   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
. q9 X8 c( f% s$ X
3 ]/ a$ V5 s1 r   //RESETn,L138_SHK22 _; I9 Q8 r6 Z: `7 L
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
' W) Z+ E7 [. K8 k1 M, X$ R3 r( B. r( x   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   * w7 M/ v( N& v
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
" [1 f7 E7 {  y# M6 Y- R& ]& u2 W
+ c% _6 E9 }2 Z, x$ \
. F/ W1 K! U- U( z5 L- l6 E; d  //SPCR Register
. e- _* h0 f3 ?  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset5 |( s( s. [0 ^! f, @  ?
  temp = 0x03000000;//(DLB=0)
" ]" Y& u4 ~8 Q3 c0 Z // temp = 0x03008000;//(DLB=1)3 d5 s' w) z' ]8 I" n; c/ u# B
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
5 U2 H/ q) e2 k* `  temp = readl(IO_ADDRESS(SPCR_ADDR));
: _; ?' Z( w' `# l  printk("temp=%x\n",temp);5 W5 ^7 |3 n+ G" R- v

8 S* K" E# K5 O, _$ z, U   //PCR Register9 d" H% }/ P: E  ~6 A/ u7 o  V5 E
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-08 h/ A9 H& \4 F7 a# ^5 J
  // temp = 0x00000F0F;" X3 E% L2 Q6 P; `/ H/ Q
  temp = 0x00000B0F;
2 ?* n' U4 b5 l  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
; {& X6 {9 J' |- e0 P1 W/ D% V  temp = readl(IO_ADDRESS(PCR_ADDR));; _2 j& x2 H! V+ r
  printk("temp=%x\n",temp);  ; J6 _) O6 M: V  q; j
   //SRGR Register3 P1 e' \, _) x
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==118 H* C* X  p1 H; Q- ?1 u
//temp = 0x301F000B;
: B/ R4 I2 `7 }   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized + V. X' _# |8 A  x" w! u
  temp = readl(IO_ADDRESS(SRGR_ADDR));5 u# \) c% T+ q& d8 k2 b( v
  printk("temp=%x\n",temp);, j: Q' K; c# I1 I5 ?
   //RCR
9 v8 ]6 h! c# A% u4 d   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,: L+ D7 R8 v2 r8 e: L- d8 h
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0, n# \* d2 `9 L6 A7 g
   temp = 0x00440040;
7 }' d9 s8 w8 h* e$ m9 I   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
/ [9 C; O& h+ [- s! S   temp = readl(IO_ADDRESS(RCR_ADDR));
, J8 U0 \% c' w5 R+ t   printk("temp=%x\n",temp);  J* T- T7 Q8 r
   //XCR
/ p$ F" ~! r/ `. A; \# Y   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
$ Z# v3 {$ E6 }7 L4 h* w) r. Q   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
2 A0 _/ J7 [" M8 k6 Y9 \* k0 l% z   temp = 0x00440040;
/ L' _/ C$ ?2 ^- A1 A  E   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   $ W5 m: q$ i, ~3 W% ~: l% M
   temp = readl(IO_ADDRESS(XCR_ADDR));
4 X, G; p/ F" \- {8 u- Y/ E" @1 Q   printk("temp=%x\n",temp);
7 }  y" b0 u5 Z5 X  w# M4 e! P$ ?  udelay(100);- x5 `' C1 e/ t0 |: i) Q
  //SPCR Register/ H( A$ c/ G9 J! s7 B
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
6 j% C1 }4 j6 i6 G3 w9 F: z4 |0 f; O  temp = 0x03C10001;   //DLB = 0 VS DLB = 1: V( A& ^; A( T: S
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
9 w+ N  z0 K$ q( ]" n2 B( `  temp = readl(IO_ADDRESS(SPCR_ADDR));
- z2 T& Y0 m3 l4 s" ]( r. |- k  printk("temp=%x\n",temp);
  Z3 R; k6 ], y3 F  udelay(100);$ x" ~" `4 B, U& i

# k3 j  ?) {% n  u  //set GPIO direction
$ j) c! f; F* E* S, g   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
; i3 q8 h3 o; S# V  G( b3 k   temp = temp | 0x00000100;//EPR----input
5 S- ~4 v8 x6 d1 V   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output* z2 ~0 ^+ n% e8 u$ Y+ a4 x
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
9 R% L  P- I2 {% U 9 A0 Z8 I: m2 m0 t* l& h5 c  p, R, g
   return 0;
# r, e" j. x& \( b' @" u9 p}
7 Z+ k& U& Z/ e( sstatic void __exit MCBSP_exit(void)
; `2 B2 [) Q; A7 u& b{
+ J& h; x+ P7 `   printk("mcbsp chrdev exit!\n");
) _0 _1 g# e' k, \: w1 `' }; e   cdev_del(mcbsp_cdev);
$ {. }3 i, {1 ~! N   unregister_chrdev_region(mcbsp_dev,count);, }# ^8 v) j: H! p4 F; x2 l  ^
   device_destroy(mcbsp_class,mcbsp_dev);
8 o+ G: s2 L( {- }/ b6 U- j9 Y" l   class_destroy(mcbsp_class);
, J) r2 b. j6 b5 [8 ]: ^9 x}# A, V: a1 R: v8 p( ^. J/ x# U
module_init(MCBSP_init);
) L& H5 e8 O& w+ _( Omodule_exit(MCBSP_exit);
* V) ~9 ~. G% m+ g8 t/ `% H* t  ]6 B' r1 r2 P% }7 I8 L
MODULE_LICENSE("GPL");
7 E3 K9 n7 K7 p' @  V% ~& Q2 \* _8 Z- z  D, f: A8 {; G! i9 V
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
/ D5 H  C7 p7 J* U我的应用层的测试程序如下, i9 D# m$ _' x& ~4 O
#include <stdio.h>% }6 n* k& `- E! X$ H. c
#include <string.h>- s/ s3 x* K* r8 n  ?
#include <fcntl.h>' t2 ^  g" k0 l2 R5 X! x3 P! B
#include <unistd.h>4 w( N. _6 T( t% ]  z
#include <signal.h>" e0 H2 F! b* @5 ]* K1 D7 I, p4 r
#include <pthread.h>       //线程
' K/ d1 B' q& c0 Z( ^#include <stdlib.h>& m4 R; k: a1 I7 |1 |
#include <pcap.h>          //捕获网口数据
0 V4 ~  S% u/ }4 y% w1 W#include <semaphore.h>     //信号
+ P" z; p5 Y' W2 i! B! ~#include <sys/types.h>     //消息对列
$ J5 ], h9 N5 j, k" @#include <sys/ipc.h>       //消息队列
# H) d" Q: w4 d/ l* B, g% [" v#include <sys/msg.h>       //消息队列
& l% J4 }) p' D% j3 C( E4 g#include <sys/select.h>
) h( M2 g! f8 \; J* j* t( Y& p5 H7 z#include <sys/syscall.h>
# N! l6 [1 Y) v& D#include <sys/stat.h>; ]8 Z2 p( j# |' M* l' w
#include <sys/mman.h>
. d8 s9 h+ y# A2 g1 g/ y#define msleep(x) usleep(1000*x)
0 l# C0 ]0 A& g0 A8 U8 \+ n: z# c5 j8 e0 t# I3 i1 c- p6 p/ J
int main()& T1 n$ g, b9 `/ M; c8 F2 A# h- Z2 {* K
{ ' Z& W: \9 x+ W
    //MCBSP,ARM与AMBE2000交互设备( L: }1 T1 N8 h: f
int fd;/ a6 Z0 H# O% ^
unsigned short data_write = 0x5555;
0 s7 z& L% O4 ~1 @$ s5 B" g% K unsigned short data_read = 0x00;
& d. o/ l- n1 l  J' K  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);  d5 U4 t+ o% q) f, M
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);8 C- |' q7 O) A" A
    9 s5 p& B' o5 ~" o# B1 k
  if(fd < 0)1 e. M# O4 {# r3 _# F; ^
  {
9 A  V; v5 n" r     perror("open failed\n");% W4 ?6 ~9 m2 \, T7 G3 E9 T( d* I$ W5 k& s
     return -1;
3 j8 v' K/ Q# v4 R  v3 `  }2 v1 z/ |2 r  i# O
  $ g4 H' Z  J( @: B( h
  while(1)
* h9 e6 E2 p* m; K- ~) S3 u  {
% U( a; O' V7 F4 @  X1 H     n. ~" n" E) [) k8 X( X( @# t" |" n& S
   //AMBE2000每次读写是24个字为一帧- i# _* |6 g" R5 E
   //写数据时将数据在底层存储起来,等到中断的时候再发送
' V6 d3 g; [: f7 y9 c; J  \$ b% q   //AMBE2000输入数据是以0x13EC开头的
# R( s8 S. n4 h, N( m  u; Y9 E   write(fd,&data_write,sizeof(unsigned short));" ?& C/ N0 A5 q1 m8 L4 @1 t
   6 s, s. c1 n: b! |6 X% i1 U  |
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  # W1 e7 g1 a3 e' D/ n* q
   read(fd,&data_read,sizeof(unsigned short));
- T0 b/ z# M7 u6 h" Y& }   2 [" [+ @: a5 j: t0 D# r1 |
   if(data_read == 0x13Ec)
7 n- H" ^9 k: M9 C6 U$ Q   {( s7 z: Z* d' M+ ~! z, R6 F
   
) }( ?) e9 H0 }4 K    printf("data_read = %x\n",data_read);9 N! V7 J2 T" z4 J  e1 n1 O& {
   }& v) o/ U. p3 S& [2 W5 P# G. m+ J
   / v( H" @7 g0 M3 @
   msleep(10);
! z6 F2 g# N& \+ W2 U$ e1 ^. c5 ?  6 T3 M( r$ h8 s" y- Z) P1 E
  /*
4 a: ]; k9 g2 D   ioctl(fd,1);   
% b- T7 K" B5 v% O5 r1 ?( a! O sleep(1);
: ?' W# [- V+ \$ }) h ioctl(fd,0);
  |/ n  v; e( X; \& T sleep(1);
! k9 p* V4 A! z+ Y */
8 z2 j0 m# J( g; J+ e  }   , ]; N! D' U5 X& N$ t! U# J5 r2 S
return 0;
5 ^2 v. P, l  Y
3 y7 T" O& I. l2 m2 y0 S}9 A$ i( E! L; D  I
5 e- F. z' N8 A3 X
多谢各位指教,谢谢! 急& ~+ v$ r! i( ?. K. J! R1 N# G

# O1 Z% p* m  V" {
0 g  l' `: c$ J+ D, v: _
! B( j  o" o6 _8 K/ M, p% l! O
2 X) X+ _) J! K
" J7 w7 ~, A2 G! A* T4 y# E6 ^$ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 20:21 , Processed in 0.049221 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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