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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
; ~: G% F9 u" Y# |/*
. g1 m# h8 I# L3 R) I7 _+ o6 @ * Copyright (C) 2009 Texas Instruments Inc$ {5 X' ]; S+ [2 u6 u0 l
*
5 u* J6 y+ `$ @" n9 C- X8 y* S6 s% d * This program is free software; you can redistribute it and/or modify
$ R1 L; t& h. b: K" U * it under the terms of the GNU General Public License as published by
$ ^+ k- C: f$ k% r; y! K * the Free Software Foundation; either version 2 of the License, or
. p8 ~4 T9 w. P9 X( H2 n * (at your option)any later version.
1 e1 Q1 S- h* ^1 E* p( P8 I2 V& Y3 Y *
; ]# {# C  H3 Y * This program is distributed in the hope that it will be useful,4 E7 m* K2 y3 h0 g
* but WITHOUT ANY WARRANTY; without even the implied warranty of! K" h5 ^7 r5 F
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the& ?1 s( x8 Q; ^7 T3 ]5 D
* GNU General Public License for more details.' l6 W6 d$ Y- ^0 f) j- m. n
*
; p& N& S1 z) o' D * You should have received a copy of the GNU General Public License
; u7 k' L6 X- j * along with this program; if not, write to the Free Software
0 K, j$ k5 U; K  s8 n6 Y, P * Foundati; Z! f3 t! r; o* B
*/, g: V$ x  c# e5 W3 M  A
#include <linux/module.h>
' u& u- t0 B! n3 V4 c" W#include <linux/init.h>& f: E: Y" N- T  A# l6 H6 S
#include <linux/errno.h>% E6 W2 p% E% i. b; {
#include <linux/types.h>
; v5 K: a9 M+ c  _3 Z#include <linux/interrupt.h>
8 F, J9 y% L0 a7 B- g4 J3 m#include <linux/io.h>
4 y3 |( s2 c2 z; i: m! {7 b' B#include <linux/sysctl.h>
9 r3 o, ~: i# `$ ]9 E#include <linux/mm.h>
: I" T( p& ?7 {#include <linux/delay.h>
! E  |" [" `5 S' o2 h$ f- f#include<linux/kernel.h>
' a' O( o5 a# f- h% g: [' _$ `#include<linux/fs.h>6 H* }, m! p1 n8 x
#include<linux/ioctl.h>! s' P  w+ E9 K' V
#include<linux/cdev.h>
& X, n0 d6 V( p' ]: i#include<linux/kdev_t.h>
4 v  }* D9 y( _$ y" q2 x8 S# L#include<linux/gpio.h>9 A8 ]! x1 W* ?
#include <mach/hardware.h>
. p. k: N5 y' k$ J2 i) b- j7 b#include <mach/irqs.h>" h) R) j2 ~- C6 V; D2 ^" S# b, m5 L

& Z7 t0 V8 V1 H5 i# q# r#include <asm/mach-types.h>+ G) n' o- i: P' U7 C- v
#include <asm/mach/arch.h>
7 `: s- [! G3 u$ i8 r9 c% W! ?3 A#include <mach/da8xx.h>. w# w) Y# U% A, z+ }
#define  SYSCFG_BASE   0x01c140001 e9 e/ y: H1 y) j+ h* T# L. y
#define  PINMUX1_OFFSET   0x124
0 m( K! U0 P3 w: \. A#define  PINMUX18_OFFSET  0x168 7 R* j" Q* Q+ f' x- d
#define  PINMUX19_OFFSET  0x16c
6 l. ]% n4 W8 B+ c2 x% }: K#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR0 v" ^0 f. a+ b4 t8 l
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR  E, e! b4 J) j6 d! I: H
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
7 ?" \! f' x7 ]# @#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR/ h. Y$ I* O' p: G( D
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
+ x0 k" @" y  [                            2 X8 E5 r! k! b9 E. h6 O9 ?- F" f, ]
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
. m) c, @! v& W( M- x#define DRR_ADDR      0x01D11000  //MCBSP1_DRR& i6 `: r% K8 v- D) h
//PSC7 u0 q& l: h( L; |2 D
#define  PTCMD_ADDR   0x01E27120  
) V8 U8 J# ?; M4 z#define  MDCTL15_ADDR 0x01E27A3C) r4 X: Q: O4 O) J5 ~2 m
#define  PDCTL1_ADDR  0x01E273043 Q( A  Y6 r8 x$ G' }
//GPIO8 direction
1 C7 ]# R* ]1 ]$ l) m0 I1 O$ o. E#define GPIO8_DIRECT  0x01E260B0
' ~7 o! ?  a* a$ O" a# k3 H. A#define GPIO8_OUT     0x01E260B4
0 w% `1 h+ N* Z2 V1 P0 d#define GPIO8_IN     0x01E260C0
+ Q. C; t" E7 F# T6 ^, `
7 s3 o6 B6 d8 [, P//#define MCBSP1_RINT    99              
6 ~- y  V$ H; c0 l) O4 T//#define MCBSP1_XINT    100  $ Z/ m$ _6 d+ e* t+ ]) |
static int MCBSP_MAJOR=239;
+ E4 ^+ ?3 y$ o  ystatic int MCBSP_MINOR=0;3 k/ Q; L. D0 n$ f
static int count =1;
) p5 X, M+ b6 h8 U9 i7 i# B
3 `" ]8 M; f8 N2 v$ L5 X#define MCBSP_NAME  "MCBSP-device"
0 O7 j- e9 N' A  |/ u- D+ [6 V1 G6 r3 K. l* J0 j
static struct cdev *mcbsp_cdev;
( P. O) ?! p2 e. sstatic struct class *mcbsp_class;. f0 G' ^" Q4 {3 Z) J/ T
static dev_t mcbsp_dev;+ L9 T+ |4 ~- T" o. ~, O" t
unsigned int DRR_data;& E2 O$ @! z( r& m& ?
unsigned int DXR_data;( ]; O6 \4 s; L/ N# c7 _+ `* m
static int mcbsp_open(struct inode *inode,struct file *file)! J. e$ |( i; t* l
{3 W: `( {8 O  k' m8 c6 T9 G
   
; t. q! C& j4 L   //interrupt enable,initialized
: i/ w0 x6 Y, b; _   unsigned int temp;
% e$ a7 L' P( j6 J% v/ R& d; l   //SLEEP_EN(GPIO8[10])---04 _  K7 O- j2 N# N6 Q
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));3 h. U$ q1 ~. S! ~% N: L: _* p. S
   temp=temp&(~0x00000400);
2 K2 I5 F3 r4 Y4 M$ C4 S. D   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
3 u& j, m" W% E# b5 z0 a- D  //RESETn(GPIO8[8])----0----11 V4 U& W: \1 D( B# m
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 m4 }1 _3 l& t- m
   temp=temp&(~0x00000100);
. z9 \- o; h) g2 _5 D( T5 ~8 H   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---07 m8 }( [/ S# b. ^' h  r
   udelay(100);
+ |7 N/ F8 Y4 Q/ O0 I   temp=temp| 0x00000100;% m! h, w. t% z) n( U
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
+ E! J6 l; ^$ T: r; s( q   udelay(100);
" }6 \+ M0 Q. U$ ?   printk("open success!\n");5 @, q# f4 F# V# @0 G  \, V$ n" |' p( r
   return 0;1 V0 S8 n. q: E3 U' h( x, H
}. ]* o, L  |( b

, n/ y$ M1 n) V6 E* ~% e3 A+ Hstatic int mcbsp_release(struct inode *inode,struct file *file)
% [! q4 ^9 o6 v: H: Q{& V# R% D9 I2 K* z/ c2 L
   printk("release success!\n");3 x, w5 P/ I% N0 Z
   return 0;, Z; m5 Q( X  q  W; X  b
}
9 I1 ^( L- e5 D7 x/ @$ W* H7 v0 G8 b3 L7 [: r2 e  n
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
' @9 `3 @; x) @" {* `" n7 K{& s( W5 _6 I+ S2 v) _' g  X# x
    copy_from_user(&DXR_data,buf,len);* M* W2 L- N5 {2 a. }$ f
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
/ s0 S# h  Q6 x2 z    return 0;+ g8 Y; y6 y/ K* U9 _

' c) X$ s$ n, H}
7 L7 g; C8 J* Z: o, ]3 }5 @, h0 w% ]% n9 t2 J
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
( ~+ p  _- ?$ j3 ?% Q3 S{ ) P* A+ x8 B# ^
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));' @5 `- \: |& }; g$ e1 b) X6 d
   copy_to_user(buf,&DRR_data,len);
, n1 W2 s  ^: H/ [0 G9 `   return 0;7 ]* c3 n4 I) a  o
}
# J4 L  G% x+ o% X) P! q/ n3 j0 o5 [
0 {* C. W7 Z5 j2 D, Z
static struct  file_operations mcbsp_fops=
; R2 S0 P) Q0 c; f' ~, V. w{2 s6 t6 ~& a! J! c$ K" X9 L
   .owner=THIS_MODULE,
% O; _. a: }  ^: t7 h   .open=mcbsp_open,
, J0 n8 U; Y2 ]; j* G   .release=mcbsp_release,
3 ~6 G" m* J: v3 G   .write=mcbsp_write,
5 }0 H! T4 @, q( g9 N$ o   .read=mcbsp_read,
4 L4 V) j: m% P! `4 X};
- e) a" @9 {7 [# y. b/ vstatic int __init MCBSP_init(void)7 t2 _, `/ g, b3 L- W
{. }3 x% C' ^* y$ o& p( Y3 g
   int ret;# X- L! E, X$ n2 G  r7 {
   unsigned  int   PINMUX1_REG_old;9 d9 O4 d0 v/ x6 v& l# U" h1 _
   unsigned  int   PINMUX18_REG_old;% t8 U8 q  ]$ m* g
   unsigned  int   PINMUX19_REG_old;
4 D! V% u% F4 c, s) u( n   unsigned  int   temp;  % X  h) O( @& p$ I- @- A5 M
   if(MCBSP_MAJOR)
3 y" c" S! x* ^% I8 ~( O   {" R2 d3 K" Z$ ?; V/ Z" j
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
1 S) A: `% G3 J& s8 V      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);5 s) e5 u4 ?% ^4 V
   }, W/ {9 t8 M0 I' g, W( Q" {+ a
   else/ _  ^( Z7 r8 r* }
   {
  Z( F/ U/ `5 O# W* Q& p      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);8 K6 z: i# M# T0 j+ q6 X1 g
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
- }9 U' M' i3 R- ^   }' x* m) X( A2 z) z
   . I4 L. x6 V* j( M1 O
   if(ret<0): R  J  M8 H, N  i
   {! ^) P1 _4 m2 G- s- Q
      printk(KERN_ERR "register chrdev fail!");* I! i# [, l1 B" f
      return -1;
( k3 i) p& M6 m$ {6 G   }8 i) C: u7 a" j
   " V) w. T7 B: b- W
   mcbsp_cdev=cdev_alloc();* r8 l2 _7 `7 W7 P- `1 O7 ]
   ' A; Y( V1 l4 I' o& k  T( E
   if(mcbsp_cdev!=NULL)
; e7 ?6 x4 ^  n1 e5 b   {
, O7 g- S0 ~4 O! ?" N      cdev_init(mcbsp_cdev,&mcbsp_fops);3 W! N' @% D4 t
      mcbsp_cdev->ops=&mcbsp_fops;
8 U: U8 m! |$ K3 V% ^% e/ B7 _      mcbsp_cdev->owner=THIS_MODULE;
. K4 e6 E! P7 g9 ~      7 {6 P: W* h$ ?$ I. h. A0 o
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
9 n, J% W) L" Q& ^2 h          printk(KERN_ERR "register cdev fail!");
: F5 _! @# ~+ x      else$ C, v6 R& A$ y3 b0 [( h* C
          printk(KERN_ERR "register success!\n");& d4 x+ o% a. m
   }
9 m% Q0 n* j2 l4 \6 A   else
# |  ], s8 b# _$ \! W! e- j   {
) ~% C% S4 T2 h/ Z* Y      printk(KERN_ERR "register cdev err!");- L; g$ ]" @- N5 @. F1 X5 }9 T/ ^
      return -1;- f1 ]; c3 I' |2 r$ |. a
   }
7 h9 W( \/ x1 Q4 X   
$ v' f  H; p& `2 x4 f  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
/ J; D# }, y% Y+ m   if(IS_ERR(mcbsp_class))& d+ p4 m+ ~9 Q1 M. e
   {
) q8 y- _; S5 D, I: [4 V      printk(KERN_ERR "register class err!");. _: @7 m! U  r' s* [  k/ H$ d4 o
   return -1;
8 z' e0 a5 G4 @" f   }) A' J. J$ w) Q6 v
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
  X5 `/ q4 Q+ d( r) i8 `& F! j( f/ N& g2 }* g
   //PSC$ o$ N* F% _' j5 y) N7 b) F
   //add Enable MCBSP- Y; H' v( l. X& |: G, @, {
   //test+ s& T: |' E! n' l
   temp = 0x80000003;
9 {8 f5 E  Z# m   writel(temp, IO_ADDRESS(MDCTL15_ADDR));6 i, h5 F- T" R; M, h- r! p* w, d
   temp = 0x00000003;- [4 a  u/ z' s
   writel(temp, IO_ADDRESS(PTCMD_ADDR));3 d5 @  p3 e9 m& ?# u) j5 a

0 q7 A0 `, z( b) i5 T   temp = 0x001FF201;
: U& D2 Z& d2 S   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
& z9 L  O  S+ W- i   1 ]: [! n3 V# p6 `4 M
   //PINMUX  6 y- \- I% Z" w
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
# k4 {* d& T8 F3 P   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  ! C& _7 R4 k' V
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
3 _2 E; M& U2 e6 J% Y   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);* q- E" P# c$ M7 V
   
+ Y: s& Q' r2 w. a   //SLEEP_EN,EPR,L138_SHK1,L138_RC
; W( J! ^2 Z% q, r) \  p   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
" G# T' t7 f, q  P! x; ]8 n  i( g( r3 i   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   2 {( i+ v% G& L" V" m" s
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
0 x/ p  H/ @; {+ W " Q$ y2 Q% C" G, i
   //RESETn,L138_SHK2
8 x, O* `2 k+ k) ]   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  5 E! |4 t) V" }! j$ i% s
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
. n; ?$ W/ y' ^& w  `   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);# s0 Q) ~' V! m5 J  m3 M1 ]. ~

( Z/ k) A7 n: ~* ~, O: G6 y# s4 ?   n6 I  k% [5 B9 a, R
  //SPCR Register
3 k+ W! s$ v; o! M0 u" y) i! ~  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
; o6 @) l2 ?0 I  temp = 0x03000000;//(DLB=0)
$ o& L( Q1 }& r1 v! c4 D. d // temp = 0x03008000;//(DLB=1): {6 U1 t( e0 w# k
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
4 J- i/ n. G, w; O  temp = readl(IO_ADDRESS(SPCR_ADDR));
% f$ ]; p" f; i/ Z+ ^, u  printk("temp=%x\n",temp);
! ~9 f9 b. q5 k$ r
- Z! G, z2 B& E1 Y" s   //PCR Register
7 ~* C% s/ V) a* `) ?( ~* g   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-00 j7 G) ^7 [% I5 _7 h
  // temp = 0x00000F0F;
' G' {# ~# Q1 E6 S5 q  temp = 0x00000B0F;
2 h- O% P% ^3 Z2 I4 B  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
" e: c* ?4 w7 m$ p# o. \' }; ?# H  temp = readl(IO_ADDRESS(PCR_ADDR));3 N3 L6 c4 ^* e8 d; m7 Z; K7 N) U
  printk("temp=%x\n",temp);  ) Z% k: U* ?3 ?  w1 f3 G* A& V
   //SRGR Register
& b" L* s/ {/ R5 u   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==113 }8 U+ w( O, X8 X! Y! w8 K
//temp = 0x301F000B;
. \2 r( h3 Q- |   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 4 R! ?3 q/ l% P2 n: H
  temp = readl(IO_ADDRESS(SRGR_ADDR));/ z5 |3 m5 N- B( [5 }
  printk("temp=%x\n",temp);* b) \2 G3 J  q4 Z5 G  L
   //RCR
- l' x+ H% V. N6 [  k   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,7 R+ q1 @; H  H
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
/ F8 K1 T4 [% _   temp = 0x00440040;: s' b( R% ^+ t: g9 X+ [0 m
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   + {3 B# J( F1 S( F
   temp = readl(IO_ADDRESS(RCR_ADDR));1 d8 S* J2 ]  C7 W
   printk("temp=%x\n",temp);% m7 D! b, N6 E, q$ B/ y. N' |
   //XCR5 x/ S- m3 u  S, ]
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
/ M0 c9 \1 b" G7 B8 _; L8 [   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-06 E$ \5 Z3 c% O$ D
   temp = 0x00440040;
# T4 @4 r& q3 E( ?   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
0 Q% h4 t( ?! }& z   temp = readl(IO_ADDRESS(XCR_ADDR));1 C: q1 L1 H+ h
   printk("temp=%x\n",temp);
& E  X. \0 i- X7 _  udelay(100);
8 L( i7 n; [% b; ]8 ?  //SPCR Register# r/ O& y" A  @7 Y) A
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
7 B/ ]+ O. S( Y) z/ j$ `, M* ?  temp = 0x03C10001;   //DLB = 0 VS DLB = 1' C2 C6 W4 q0 A& v% F0 {
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled7 _+ M+ l1 l; W
  temp = readl(IO_ADDRESS(SPCR_ADDR));% I6 l3 j5 s3 K. y
  printk("temp=%x\n",temp);+ x2 L* |; e0 L# i
  udelay(100);8 E2 {; p3 W! X! H% ?" v$ k! k& K

  b) ?% o5 @, A* k( X( c  //set GPIO direction: C( r  w9 @/ W2 m9 p* N
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));  p  n# M2 ?$ Y/ e' ?7 Z- S; l) e
   temp = temp | 0x00000100;//EPR----input& T, }9 H) C5 p% V
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output3 I+ s0 l- l; U  d
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); / h& u5 w2 Z7 d, y
6 L3 U  F1 W# Y. ~
   return 0;0 `( Y  s: y! F+ _" |4 H, q
}% s1 b1 u) e3 b2 x: B
static void __exit MCBSP_exit(void)! v2 `7 m  }; |) o" _4 L+ u
{
6 z" m( H5 D7 B- w! m   printk("mcbsp chrdev exit!\n");* x( p! Q2 C, B( y
   cdev_del(mcbsp_cdev);
( t& r( a3 n9 |' x- @   unregister_chrdev_region(mcbsp_dev,count);. q6 l6 |# D6 b4 D1 H
   device_destroy(mcbsp_class,mcbsp_dev);) S: @# h& n6 u( S& a6 M2 H4 ?* Y$ t
   class_destroy(mcbsp_class);6 Z5 X# s- h: `4 o
}
$ H' j; r, j; U4 t8 nmodule_init(MCBSP_init);- K! _1 k! R" W6 a$ D& s9 J
module_exit(MCBSP_exit);
7 W( ?' i' ~2 c1 ~9 ]' r# c
, N7 N$ o1 D6 V/ oMODULE_LICENSE("GPL");
! @' k# ~- [8 I: G# ^
8 j* g. `" Q4 L; @: }7 K; D我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。3 i* N5 _2 s$ f/ r" }
我的应用层的测试程序如下
; z/ M$ r! Q9 F' J$ x#include <stdio.h>* p$ g& p' m8 P/ s# I
#include <string.h>3 k. f2 P, }0 j
#include <fcntl.h>
5 o6 |2 V! j0 T/ m6 ?/ q0 A#include <unistd.h>
8 I1 l! `, H2 e- l/ H1 O#include <signal.h>1 [7 r% F0 j. d& x: K
#include <pthread.h>       //线程5 Y/ b9 a' J- \( i# t( y& u: M
#include <stdlib.h># a! N- e- v* a) S; ]$ R8 X7 t
#include <pcap.h>          //捕获网口数据
0 K: r! v3 F6 e5 u$ f#include <semaphore.h>     //信号0 B( a% ]8 g+ ~0 S
#include <sys/types.h>     //消息对列
1 i5 p4 F8 j" j% @$ z6 L# N8 q#include <sys/ipc.h>       //消息队列
3 ?0 O3 a6 `. D: D  k5 @1 y#include <sys/msg.h>       //消息队列
0 ~' I. b; ]/ n" b  }#include <sys/select.h>
+ j9 r+ D4 K- Z# V4 s#include <sys/syscall.h>' x  k4 c+ ]/ z( y
#include <sys/stat.h>; a5 F4 m3 j9 H2 I
#include <sys/mman.h>
1 e2 m! A  D: D0 ]) Y( ]+ _, x#define msleep(x) usleep(1000*x)
; l% X9 m9 L" m$ q" O% {2 O+ r
int main()! C) U5 f# T# O6 S
{
; u+ d+ Z) K5 J/ K3 x; }( F9 P    //MCBSP,ARM与AMBE2000交互设备
+ z  W4 D' N7 ]1 Z1 V+ ^ int fd;1 m, T  a8 ^0 q7 S, V
unsigned short data_write = 0x5555;" ?: Y* P  ]( t8 _
unsigned short data_read = 0x00;
) |+ ~7 @3 d+ s( ~0 k$ N  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
6 L: ?1 |5 H' n4 T4 @ //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
6 K0 B' Y1 G4 P7 Z, q- R) L   
* q2 S& m; j' ~4 ^  if(fd < 0)0 [( j% T8 n* r
  {
- ]. o% f( ]# h. E2 v6 W     perror("open failed\n");8 c! I( l- u: F% {" |1 y
     return -1;
" B8 [4 {6 V9 p3 M4 w, R3 A% e  }" J* v4 _. l8 [7 W% ]
  4 h) L" _/ d+ R) ]' Q% I% X" T$ T% B
  while(1)
/ T# s2 O5 p$ {( z% d  {7 m  V& P7 |& m9 @; W# G; e
   , _3 s$ ]3 \: @9 N# ^9 u
   //AMBE2000每次读写是24个字为一帧* k: i8 K* ]1 h- X  Y
   //写数据时将数据在底层存储起来,等到中断的时候再发送
, X& Q: X& j3 J) I& \9 u   //AMBE2000输入数据是以0x13EC开头的
! v' ?3 s  F! I/ ]! A* L   write(fd,&data_write,sizeof(unsigned short));# _8 o+ y( z. `' F
   
$ d0 m2 N! |, \- Y0 _   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
1 V8 K, w2 q& Y   read(fd,&data_read,sizeof(unsigned short));9 {; @- M1 p3 M8 L3 C/ J5 i" d
   
. _& u, D: E/ c   if(data_read == 0x13Ec); H, f) D3 |' K( `" d$ e
   {4 Y& n, Y2 J' C$ ~$ ]
   
, Z6 ]' p& q% P, }' }; G    printf("data_read = %x\n",data_read);% E& J8 n) |' s) |
   }
; s5 {4 P0 e* z0 j9 C8 @   
) W2 |$ d1 d$ V$ N, r; ]   msleep(10);
7 l) o  i; _% {3 e# i' W9 X! a  # r* t8 h" v7 J# }# M/ ~
  /*
" E2 K% t& `( i7 U: z$ {   ioctl(fd,1);   1 e$ p- @  n+ ]: x
sleep(1);
& Y" J# z% n0 H ioctl(fd,0);
- K3 @' S+ {* o: X. `5 c1 [: z$ R sleep(1);! h, [$ A$ Y# U( v' ]' J
*/ - f# G1 q7 J) T' A
  }   
- n4 B& N$ w3 ^4 A, e+ ~" O% L7 H return 0;
- A# p% A3 j6 J6 T8 G# F- J 6 I) }: D' ~- r8 O5 T
}
, ], g( e1 |' Y# }  y2 m8 g, o0 T  _0 p$ Z
多谢各位指教,谢谢! 急) u0 h4 J* k6 a8 F. ?' p! A

: w  Z' n9 k4 }! k% C4 ~4 c( u& n2 a4 I6 D* c( f
1 n3 q9 F. t& m% Z- M$ q  O

) b. G6 {3 q, n/ X% P. Z- N, F5 R  F& q! \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-9 20:09 , Processed in 0.052581 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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