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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: / [! v& u  z( Y7 O) N9 v
/** k0 I, g6 {% S% z3 h1 S
* Copyright (C) 2009 Texas Instruments Inc
' T6 E! m& v, B; H  @5 ^) k *" H+ I. X  b* G# a* V/ f
* This program is free software; you can redistribute it and/or modify/ Q8 K2 X4 p# [; P; W2 y
* it under the terms of the GNU General Public License as published by1 J& h7 n% D' [
* the Free Software Foundation; either version 2 of the License, or
9 w8 w0 P1 y6 `# U) J+ o * (at your option)any later version.
" w: h# I, X% q- q *" P3 U% x$ X' @0 l" w. ]$ u
* This program is distributed in the hope that it will be useful,
7 p2 w7 e. F  y6 C5 A * but WITHOUT ANY WARRANTY; without even the implied warranty of
; N0 s, l2 \" R% o- p  l1 }' H * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5 {6 @$ e+ m, H- Q+ e; p& I; U * GNU General Public License for more details.
3 D, j; c0 z! Z5 [6 b) t( d *1 ]$ n2 {) r* Q
* You should have received a copy of the GNU General Public License# I) w) v4 W2 H3 K5 l6 ?+ l
* along with this program; if not, write to the Free Software0 S2 C+ x7 ]+ L
* Foundati
9 c. e# _# R& F- a  G*/
. N0 N$ y( e& w#include <linux/module.h># h) V1 U: Y' O& ^' p
#include <linux/init.h>
5 P3 y: U" T8 @% j+ Y3 `& Y+ W9 b. X#include <linux/errno.h>
3 _) Q/ r0 t/ ^/ L" A- L4 Q* X, F* n#include <linux/types.h>8 j  P& \% _- B) r
#include <linux/interrupt.h>
' M& M" U; T& i7 H' G#include <linux/io.h>
, v5 O( m  L0 E6 x- y#include <linux/sysctl.h>* l! X* G& I1 B/ r
#include <linux/mm.h>2 N, h; x* P, p5 x4 M8 D9 P: N
#include <linux/delay.h>
6 @1 E1 l1 f, X6 J( q$ ^. H#include<linux/kernel.h>
) X2 h2 M7 o! z# I: y& m8 ^#include<linux/fs.h>
' D( K! w/ a; s+ l' g) d& N+ Q7 ]#include<linux/ioctl.h>. Z4 |/ S) m: M5 a9 @; x- s' z/ Z
#include<linux/cdev.h>" ^4 d/ |% h7 K3 n: y
#include<linux/kdev_t.h># M! x8 }# p# S+ G
#include<linux/gpio.h>$ D7 T  Q5 y7 h' K  n  J8 z
#include <mach/hardware.h>& |$ }0 ?7 x6 e: |/ W. z
#include <mach/irqs.h>" {4 }( w8 u" j4 g

. X# @; }; O2 E/ \#include <asm/mach-types.h>  |9 K9 q7 T1 H2 A  i/ ^7 W
#include <asm/mach/arch.h>) w/ p" q4 r( n( L
#include <mach/da8xx.h>
# y" R1 l: U3 }# D. k! p! n! ~#define  SYSCFG_BASE   0x01c140003 a0 g& N& a% p
#define  PINMUX1_OFFSET   0x124 - z: ?# B# N; T% Q7 v+ j
#define  PINMUX18_OFFSET  0x168 * s# c6 Z% b2 Y! V
#define  PINMUX19_OFFSET  0x16c
7 V3 _& Z5 l/ R#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR+ g' f; `% T, A; V- \0 O
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
% h3 j  J/ N4 k#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
9 P' Y0 o( e' e# B#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
: R4 D6 y9 Q* W8 O" D5 f#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR- f+ P* m' ~6 G6 l
                           
/ @; Q- j  X) W2 h  W#define DXR_ADDR      0x01D11004  //MCBSP1_DXR5 m# v: J+ _* O  w0 U4 i4 T
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
% o8 v  M: E; R) t//PSC
& c7 \9 }. C; U. k#define  PTCMD_ADDR   0x01E27120  + H' B  W! l, W. C3 T
#define  MDCTL15_ADDR 0x01E27A3C8 c  G5 {, o8 S
#define  PDCTL1_ADDR  0x01E27304- I0 e( g3 u- V$ q" V
//GPIO8 direction6 E6 r  b' m6 J7 U% Z
#define GPIO8_DIRECT  0x01E260B0
2 F& E; H. `  B3 |! g3 K7 I#define GPIO8_OUT     0x01E260B4+ ?/ h& W" T* n. ?& a; @
#define GPIO8_IN     0x01E260C07 u! R& {) I: C# u% T+ s/ r2 Q

/ h  k- E, o1 y- B//#define MCBSP1_RINT    99              
% {/ ?# Z7 A) v8 G- R  [  ?. w( m//#define MCBSP1_XINT    100  
- j' ]( h' ?! ]. q; B: }static int MCBSP_MAJOR=239;. Z3 h% L/ o) E& e7 H) @  C
static int MCBSP_MINOR=0;
7 n  u8 c7 K8 C9 ^static int count =1;
  D* x4 x" z& C' n, x3 y: ]; N3 B) e
#define MCBSP_NAME  "MCBSP-device"  u2 F$ @/ [0 B, g. D- B
& I; @& p' R% c2 e" i2 n6 i% W
static struct cdev *mcbsp_cdev;% D4 b7 F; ~; ]
static struct class *mcbsp_class;6 l0 S, e- n' e. O
static dev_t mcbsp_dev;
, e: c2 x8 J% L4 Junsigned int DRR_data;# b# U" f  ~( h9 K4 S6 q
unsigned int DXR_data;
: j, S0 |/ ^+ n( }) `static int mcbsp_open(struct inode *inode,struct file *file)6 d- F; l7 @% L7 a2 X+ v
{: C' K5 P; v: Q2 h) D) C& ?; g9 i
   
; x1 s1 y, E8 B" n0 \/ T: [" |   //interrupt enable,initialized
9 {7 w/ Q. c& @4 v, W6 N2 W   unsigned int temp;" J, f( J1 u8 c' J: _8 h/ w
   //SLEEP_EN(GPIO8[10])---0& ^) u9 `5 U" \3 `$ u
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));$ \+ U, z* h% @
   temp=temp&(~0x00000400);
+ ?8 u$ V! D. q8 s   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10], \8 s. c' ?+ g: O& S1 S/ r8 A2 a
  //RESETn(GPIO8[8])----0----1
+ }9 K  c; O7 X$ Q- F# O, ?# G! J   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
/ v3 B1 l  @& ^; u! [   temp=temp&(~0x00000100);+ [7 U4 K7 T0 O! c
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0- A0 n( x6 O& g  e
   udelay(100);9 d  y* M# M: ~, D- s# r
   temp=temp| 0x00000100;, u) J0 J/ X9 ]4 H8 v: m
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1- v5 C0 z% L6 D# {7 w
   udelay(100);$ N3 \; [; U/ x% J
   printk("open success!\n");6 I- z- [# x# L; P
   return 0;
( {5 z0 e* ^/ F, u$ ?}
+ }4 Q4 O  q+ Y. q% F9 b# F, H( y, x6 G! k
static int mcbsp_release(struct inode *inode,struct file *file)
& l. k+ Y$ x; t2 e1 R+ V- T{
. u5 M" i2 k% L! V* {6 y   printk("release success!\n");
& d0 h9 u$ q! U% _5 t* v7 w1 ~0 B   return 0;
- V! f7 ~  o( {' Y}
* Z2 L& O" j- Z$ b+ @1 D
6 b* y2 P  t2 l* V4 mstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)6 C  m6 ]4 `9 s" }" c6 ~/ Y
{
: D7 @& y6 U7 J& i5 T    copy_from_user(&DXR_data,buf,len);. _& Q* S: Y/ L/ A5 O
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
: n: w) b5 c% l    return 0;
5 H2 p/ t- G7 i; r" v+ u. ^# M & `9 d1 G1 P# W1 B, N9 D; C( q
}# [( x( a$ @7 L& C: w3 U, t* P- @
1 R; {$ ^8 M4 r+ R
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
6 I; R1 y9 X0 z/ K& X1 M4 t{ 9 |* N/ B  L3 @4 b% e
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
7 d3 e; N$ v- x* r   copy_to_user(buf,&DRR_data,len);
8 j" f8 O& P& E) w0 B) @   return 0;
7 B, K, b5 G8 {( z}% E0 L$ E* k9 e
3 l4 I, ~5 F7 }
3 b# w/ @- ^- R& x* s5 R
static struct  file_operations mcbsp_fops=
- s& \6 V$ c) L: w{
* B$ Y: i. `9 w$ A% c   .owner=THIS_MODULE,
3 b  l+ {! A" g( w   .open=mcbsp_open,
( j, z" k; `- V   .release=mcbsp_release,
' l3 H- B7 C! P   .write=mcbsp_write,
1 C. e( T$ V' m3 \" [. ^& q   .read=mcbsp_read,
5 ]. m4 ^, N6 B};7 M% M5 a: k8 I9 Y& L( w8 C
static int __init MCBSP_init(void)* U* L% F1 U/ i: s9 M6 O# Y% X
{: ~8 M" m+ d# z( c( e, D
   int ret;
9 x% d& w9 l% Z( \; `: n/ u   unsigned  int   PINMUX1_REG_old;
% @3 q; r. T% a, E) s6 x0 a8 u   unsigned  int   PINMUX18_REG_old;1 C! I! D# L8 i( }" i. ?- s( ?
   unsigned  int   PINMUX19_REG_old;. X4 d* |, ~0 m( Y5 V) A& o
   unsigned  int   temp;  
; W7 b8 X1 T" L8 j8 I   if(MCBSP_MAJOR)
# x' f* O! y" ]/ o" ^! M   {
" z6 i) Y. R6 n      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);, |: B4 {$ g, N5 e9 S$ z) m
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
* \' t( N* A" I0 i& u+ u/ K/ G+ Z( x0 S   }
' Z. w) V$ r8 _" u0 n# I   else5 ~# a0 i. L7 ]! k6 ?
   {
: V  t! q# X$ @% q9 n% n; K" a      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
8 E: L, r/ n6 e8 G9 r2 |3 k      MCBSP_MAJOR=MAJOR(mcbsp_dev);+ w+ |$ d2 g! c/ ~0 h- R; }* Q" X( A0 q
   }
  u/ g- w. w# ?/ _$ ^5 q; g   ; W4 b/ o; f# T2 F1 d4 y: s! s; _
   if(ret<0)- W% ~( L; f2 Q* b  I
   {- C; o+ N8 V/ W$ ^7 o) [
      printk(KERN_ERR "register chrdev fail!");
0 r6 P9 D' t2 ~9 ?. z% p, P6 G: C      return -1;
- Q. U$ ?0 T3 H% b+ p0 `: C( G   }6 a. c, e: J8 }) a4 C
   - }. Y8 L- a1 z
   mcbsp_cdev=cdev_alloc();: H7 Z6 l( @: a* M8 P
   + y4 @% y1 [# m, ^4 g) x  r0 q  J  h" ?
   if(mcbsp_cdev!=NULL)9 T1 v$ g/ b6 `2 u( b
   {- ^; S1 Y: p4 u: t8 F: k
      cdev_init(mcbsp_cdev,&mcbsp_fops);& A+ A  V. u6 p" l
      mcbsp_cdev->ops=&mcbsp_fops;0 L7 ^: m- p8 y
      mcbsp_cdev->owner=THIS_MODULE;1 `! D* F/ G2 k
      
( e2 o) S! E+ v( a. u% n: A+ Y      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
1 q* N2 B* b' I0 U% Y% h% C; k          printk(KERN_ERR "register cdev fail!");( E. `4 v0 W) X% H
      else4 `" f" l5 p, p
          printk(KERN_ERR "register success!\n");
0 B! i( s6 e+ r7 Y   }
2 t* }; c- |0 m1 K: K+ ]9 a1 e   else7 }, u2 j& _' ]: B
   {
' _. m! b. k) ~8 Q0 a$ u, T; u      printk(KERN_ERR "register cdev err!");
: A- |2 t4 K1 q6 W# X2 g      return -1;
6 ]2 T! ]9 b# e# y   }
8 Q& ?- E% n9 X% y) Y   - X; T- w$ |6 K
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
4 c. x, |- I; V! d8 x. ^# Y5 w   if(IS_ERR(mcbsp_class))
5 \4 h' t% u! o: f8 e   {' t1 ]3 ]0 X6 _/ p8 b
      printk(KERN_ERR "register class err!");9 o! X) S- P3 k# m
   return -1;; P1 p1 I2 q: g1 u9 @
   }
6 Z" v4 u+ D; f   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);  x7 ^, i1 [& S6 Z

- C1 }  }! a3 ]   //PSC5 R! y% t$ M) [# v+ g8 B2 F
   //add Enable MCBSP
; B/ ?8 P3 F4 O* P- S) @% r; @0 w   //test
3 j, }  |, x; X8 e; _0 R$ ~   temp = 0x80000003;$ [) h+ N7 [5 s# s9 K- Z% e$ [
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));' p3 ^- t' K! z, t/ K2 g
   temp = 0x00000003;
" {$ X6 E8 t% ^& X5 y   writel(temp, IO_ADDRESS(PTCMD_ADDR));
8 ?1 E8 X6 y  X- i  Y; u
% d4 U: d9 y5 y- V0 M   temp = 0x001FF201;
2 ^  x; t2 w* A' v7 k7 U6 q& w7 E% J   writel(temp, IO_ADDRESS(PDCTL1_ADDR));7 [0 z$ T' ]4 E  H" E! O* \
   
$ A! G2 C; U( x- @2 A+ G2 Y0 k   //PINMUX  % b; m! E6 j, `& _* \- _6 S4 i& x
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,/ ]8 r; g8 o3 D2 d6 L* m
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
$ K  u* C& x- p! ~: V1 W) J7 d% ]7 M   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ' j! T/ s6 L9 F  k
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);8 [1 [. N% v) R" O: R
   , P( S) F" l6 U
   //SLEEP_EN,EPR,L138_SHK1,L138_RC6 E' ~# {; P7 P" ]) }3 o: F3 n
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
9 \0 g( ?& F+ g- G+ ~- K: Z2 Z3 t8 w   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
9 S7 [4 |0 D% E3 g. r$ p9 h   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);5 Z, l" {1 K. w
6 n3 g; s1 F2 U
   //RESETn,L138_SHK2. x8 m3 X* j% ?% d5 L
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  / S. ]2 z: v& }9 m' U" i% H
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
0 U9 a4 x6 ~& w6 I! Y   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
" A; i) P' `- R8 O . I- [  B' c8 \

. h) P2 P+ ]; _+ P, C  //SPCR Register
- y/ W2 Y/ z' b9 F2 n/ p2 t; A  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
# O; L) H% d; }, p  temp = 0x03000000;//(DLB=0); E. m8 N, V2 O& @: T" B; E/ e
// temp = 0x03008000;//(DLB=1)( x; U% ^7 a4 \9 W) g
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset  K" U' n# M5 g7 ^; W% S& v
  temp = readl(IO_ADDRESS(SPCR_ADDR));+ Y7 d+ u1 b5 c: |. W
  printk("temp=%x\n",temp);
/ P9 j  A: y/ |& z0 b: x3 j8 N, p
; F7 T, N7 o4 P# W% G, g$ |" x   //PCR Register
# E( x. O3 R! P( `8 f- }2 ]   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
0 j2 C: ^) x6 d9 R% \  // temp = 0x00000F0F;
, g# z- m( `  h+ `7 h8 S4 z  temp = 0x00000B0F;
7 b! Z  m& _: b$ e  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
& n# E3 y$ R! R( O0 _( `* `  temp = readl(IO_ADDRESS(PCR_ADDR));' \. C: ^' a$ s1 G1 u% D  s# g
  printk("temp=%x\n",temp);  " U# f5 J4 N0 X5 R+ ^/ S& H
   //SRGR Register/ q& o5 r. r" z: a$ X& b
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==116 h0 l% s7 ^% N7 f, }( S
//temp = 0x301F000B;0 Z  N- t" e' i
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ( @2 @9 I0 _1 Y) @7 z& @8 ^3 j
  temp = readl(IO_ADDRESS(SRGR_ADDR));7 Q  f( }+ ?: d% G5 o( w' y
  printk("temp=%x\n",temp);/ b6 R- S5 c2 l1 P  m8 R
   //RCR
  t% ]$ \" Q3 r# x' g( K   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
* P3 K: e3 I+ \% u   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
6 ]/ v6 H' b* a6 P& t2 K   temp = 0x00440040;: E% |2 e6 S# j5 R3 D
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
4 D6 @0 c' ]( Z0 A   temp = readl(IO_ADDRESS(RCR_ADDR));; V, }# q2 D- \3 X- W
   printk("temp=%x\n",temp);
7 _$ P# }, o1 h1 `   //XCR+ \9 F# A7 Q4 Z8 u+ h* u% g, Q
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
9 K2 q  ]! h( R   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0# C# a% m- A0 h
   temp = 0x00440040;2 \& X6 e1 ?- `2 w' j
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
2 h, E. j' F) H9 T   temp = readl(IO_ADDRESS(XCR_ADDR));2 r6 \) u) r0 ^8 _1 E% P  F7 L
   printk("temp=%x\n",temp);! D9 S: P0 P1 S+ p$ S
  udelay(100);0 U* q6 i+ `8 J2 m. _: h; `
  //SPCR Register
& x' W; f6 e, f' H& f  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1' Y# F. w# W/ [6 P" o+ ]
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
+ D, |! y2 E3 n% _  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled. o% z! n4 [7 ~
  temp = readl(IO_ADDRESS(SPCR_ADDR));* A9 I6 i, x( {  T
  printk("temp=%x\n",temp);# Z0 P+ S# x% f( F
  udelay(100);* y: x9 Q0 d+ t4 i
9 }5 ]* I. U9 m8 `  S
  //set GPIO direction
# k" U! x6 \( B   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));3 u* g0 w4 L( O! l- ~# v3 M7 K
   temp = temp | 0x00000100;//EPR----input
/ {3 e( k( }) ]5 F# s5 I! l) S   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output2 e* _: G/ C4 @6 {: p9 u
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
+ Y; z/ a5 H  ], K! u
$ z9 }) M9 @- p# L' }( q   return 0;) w* g, U& E6 s( L3 p  P
}
4 ?) ~+ M$ B! [- @' ?9 H" K  {8 e+ ystatic void __exit MCBSP_exit(void)
% B2 q5 e% M( e, Y- t% Q" r{/ }0 Y/ f" _& J' E
   printk("mcbsp chrdev exit!\n");' ~0 G+ [6 g8 {5 Q) ]$ g9 W$ L
   cdev_del(mcbsp_cdev);
3 o9 @: ^$ B1 {. q+ h5 H   unregister_chrdev_region(mcbsp_dev,count);8 P. ^: x2 o' {8 w' V9 i
   device_destroy(mcbsp_class,mcbsp_dev);% F) Z. S1 E0 ?" \. b
   class_destroy(mcbsp_class);
0 `" ^/ ~/ T' b}
) z9 d% }. M/ T& Dmodule_init(MCBSP_init);
) ^3 i1 |: W$ z' o% J7 t/ @* n0 Rmodule_exit(MCBSP_exit);
" E. n( c' K# Y& k  c
5 T1 E# t9 Z. Y7 f+ q; VMODULE_LICENSE("GPL");4 ~! ~+ j( u* O: e: s  O
. I; o* s: s) @) J
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。  `0 X; y* \  q1 m2 B) u0 C
我的应用层的测试程序如下
' r+ G7 D3 y3 v#include <stdio.h>' J. @2 h! o) F& ?" Q6 U/ ?% Z
#include <string.h>
4 i9 ]/ }; j' ?; C6 K9 f#include <fcntl.h>
- f0 Z1 N/ c$ P6 o/ o- L#include <unistd.h>
, l! \6 |  b) n3 ~& f( G#include <signal.h>
8 c/ j8 {$ j4 i$ c# f' c* ^#include <pthread.h>       //线程
! U/ i+ G$ e5 a& ^0 ?#include <stdlib.h>! h5 E) b. v* E( _) p1 H
#include <pcap.h>          //捕获网口数据  z5 D8 I" n# K* ]) P9 \0 T& A( r: }
#include <semaphore.h>     //信号
* ^* `, S5 u7 m; @#include <sys/types.h>     //消息对列
) N3 n+ d( |5 D; k* J2 M1 T#include <sys/ipc.h>       //消息队列0 X& C" \) h/ F) e0 c: K
#include <sys/msg.h>       //消息队列
( ?" O7 a6 E2 S- ?$ x#include <sys/select.h>
1 a& |/ R8 z- B5 g* m1 C* c- A2 z#include <sys/syscall.h>
! b1 E3 J* t$ w% j! S8 x& h#include <sys/stat.h>- Q: H0 f: r# I! t5 V
#include <sys/mman.h>
, D$ O( `1 r# |' R#define msleep(x) usleep(1000*x)" P0 b9 F' z' E  M- W/ f( V6 g
+ V/ Y1 l& j8 Q& L9 n
int main()
% K# b& T( w: r) l3 e: Z6 h. B{
6 W1 M7 w9 w- F7 h! I! d5 R5 K2 p    //MCBSP,ARM与AMBE2000交互设备2 g9 l) {4 w% Y1 j/ l$ ^% d
int fd;$ S: S& P7 i. `! l, S' v
unsigned short data_write = 0x5555;. H- r) D  D" ~7 F) G4 S8 D0 e+ m
unsigned short data_read = 0x00;
/ x0 p, m7 y9 r( U% h  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
9 b/ l2 o+ n; ?6 `) m/ F* k" I$ K //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
* s7 Y; t( H" u   
2 }: t: y2 T9 ~: n) F7 s  if(fd < 0)# x! j& q7 X( {& y2 Q, r& q( f" o
  {2 _* R$ A' t/ Z
     perror("open failed\n");& s# s5 S0 i2 k% Q# _
     return -1;* T& B5 J" [/ r; ?4 }
  }
5 C$ Z5 G. z3 J$ [: ?# C$ [4 E  
2 w% _" Z* I2 a9 X  while(1)
( a" ]/ F- Y( m& Z! I  {% n- N7 L: Y( \- l: T
   0 b; J$ S0 T3 \2 o5 ?9 {" H3 J
   //AMBE2000每次读写是24个字为一帧5 k2 ]# j: e  ?- V
   //写数据时将数据在底层存储起来,等到中断的时候再发送7 t+ J. S! w  u' _  g, U% M* P
   //AMBE2000输入数据是以0x13EC开头的
$ |8 A* V% v' H# h& @   write(fd,&data_write,sizeof(unsigned short));
1 ~6 F: U/ O% `   
" e) S5 x5 N9 O" W   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  4 j1 J7 E. N) j
   read(fd,&data_read,sizeof(unsigned short));
& t6 R+ C, V3 `3 K2 u6 q   $ y9 h4 e+ E  s% e4 N& e! Q5 ?
   if(data_read == 0x13Ec)+ z4 q* b6 m# h1 z  B# @
   {
5 w& A% U! w2 k& m" P- f   , ?. i  g$ r5 {# O( q
    printf("data_read = %x\n",data_read);
, ]0 {& H6 Y1 J* A' A0 A4 E   }
4 }  q7 H7 B* D9 A) q$ l( i8 u   + U% G8 u, W8 ~, ?
   msleep(10);
) }. b3 [8 g4 h' b3 ]  % g7 u. v( R$ t% c( |" m
  /*
' x. @0 j+ @6 S6 W/ r   ioctl(fd,1);   
" t! t/ H: ^! ^& H3 A sleep(1);% _" _, e% `( A, X. V3 ?
ioctl(fd,0);
7 @9 D" b, \; C" F+ D' Z6 K sleep(1);& W1 E; C! ^+ |' i; J/ R' ]
*/ 1 o+ ?9 d3 ~4 d' ?3 [  u! A* a
  }   $ P" r; Q1 W/ w# B/ {
return 0;
" E- q* b. i' i( F
$ ^; s" Z  m- f  M% u5 [}
$ Q2 y: d9 L0 v) ~# N' k2 U+ w; D! i
1 F0 c+ J" @5 U多谢各位指教,谢谢! 急4 s4 {; m! _% c

. Q' {% A6 s" b4 Y; |
7 |5 ?/ m) H  z3 k5 R
) ^# L4 d8 A" ~6 I/ Y7 S1 Z1 E. B1 D/ }! A. k: ]9 r

" A0 l5 P. C, @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 13:19 , Processed in 0.042479 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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