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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:   n! h7 k$ U  y3 z$ C
/*
$ ]8 p) @+ o* {4 ? * Copyright (C) 2009 Texas Instruments Inc
8 Z  e, ?2 Q  M* m. ?/ n' h *
# J" D- E6 `0 G/ D  c! J0 |% {- d * This program is free software; you can redistribute it and/or modify
9 [$ D) f- J" O- J. E * it under the terms of the GNU General Public License as published by9 N( y& m7 {% n5 h$ \) F6 v& P
* the Free Software Foundation; either version 2 of the License, or
/ h4 w5 d  S# N, I( I * (at your option)any later version.
# K  P! O- @) s' q; P# o *2 {  S$ E7 k( R2 }8 s6 R
* This program is distributed in the hope that it will be useful,* o0 Z2 d* \" R7 R0 R3 d
* but WITHOUT ANY WARRANTY; without even the implied warranty of
  ^( C0 P* ], d  x * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 N8 B# Z8 Q; K, v' ~6 x
* GNU General Public License for more details." B, H, o8 v" p9 o( n
** \, o  c6 K# o  @" H  {
* You should have received a copy of the GNU General Public License# }$ `5 t$ n0 }% l5 B
* along with this program; if not, write to the Free Software
5 K& E  j: n# _0 W7 b& I. p! s* c * Foundati
8 F. |" M$ h) p*/
* Y, M2 B$ `! x, \' g# R9 v+ B#include <linux/module.h>, t" [0 h( P  h1 b4 s( C, B
#include <linux/init.h>
* J  m0 U' c6 N0 q, o1 r* K  s#include <linux/errno.h>, `7 Y' k& _' Z/ M  T
#include <linux/types.h>% p: Y' C0 \/ H7 X
#include <linux/interrupt.h>  l# z* b3 j$ }% u8 \
#include <linux/io.h>
. o) A. C  Q9 ]! K0 y/ L#include <linux/sysctl.h>5 r; t2 s+ X/ z
#include <linux/mm.h>
7 ^: }# b7 F1 |" s$ {! Z# T' e; ~8 a#include <linux/delay.h>& m* L, a& g$ y, I8 r9 a
#include<linux/kernel.h>
# H7 w8 l8 Z- c1 b( T#include<linux/fs.h>
) @. N; F  D' Y6 U# v# v. w#include<linux/ioctl.h>
8 |6 m/ A' m& X8 I; z- A+ l6 C#include<linux/cdev.h># S0 \; K* ^  k8 k$ b
#include<linux/kdev_t.h>
; z9 d& \1 `2 H  ^( |#include<linux/gpio.h>; P5 d2 x& z" [) y9 P; F
#include <mach/hardware.h>
% ], M6 j; w% T5 U1 K#include <mach/irqs.h>
& O1 R% r5 L+ x
. J$ F; A6 l" x( ~/ o#include <asm/mach-types.h>7 [) d/ U/ N6 `4 q9 a9 s
#include <asm/mach/arch.h>9 V. Q  x' p# d( h" K% K$ ?. _
#include <mach/da8xx.h>, g/ v) z% \# e7 p
#define  SYSCFG_BASE   0x01c14000
* e, G- C# d# ?: v- W#define  PINMUX1_OFFSET   0x124
; W/ p4 n1 o, D8 I, m; Z- l/ |. n#define  PINMUX18_OFFSET  0x168
, A9 Q$ u2 }* h! E+ N4 d$ H#define  PINMUX19_OFFSET  0x16c! r- R8 ]" A. H- j' M
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
4 B0 y2 Y2 U- Y* j#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR; d& S! r" T, b; Y" O5 \2 z
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
8 \" W; x$ T" d$ g, L0 a6 {#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
% S( F' H+ @, v7 d! S#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR  O8 e; Q8 P9 W9 J- s
                            8 A3 p6 C0 J% A) t4 ~% F. v# s& A
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR' |, G8 V* L: L6 {
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
0 j6 X5 `  h/ L: l; ?//PSC
8 d/ H" c) {& i3 U#define  PTCMD_ADDR   0x01E27120  
# k# ~0 E* E* s" Q# F; q#define  MDCTL15_ADDR 0x01E27A3C
! p5 Q6 j# Y$ q1 |$ x#define  PDCTL1_ADDR  0x01E27304" Z/ ~5 N3 W+ w4 }# c
//GPIO8 direction
) T6 {5 I* k. W8 U" F#define GPIO8_DIRECT  0x01E260B08 {) a, g& j: R, w6 Z+ d
#define GPIO8_OUT     0x01E260B4: ?$ f% N8 `6 K  _, y
#define GPIO8_IN     0x01E260C08 q3 ~9 _* G- H

8 m) S9 z9 V/ z5 S//#define MCBSP1_RINT    99              ' H/ `9 |- y* g& q# K
//#define MCBSP1_XINT    100  
2 G7 l  ~9 s& E( jstatic int MCBSP_MAJOR=239;$ [5 x1 [+ }4 F" v$ S
static int MCBSP_MINOR=0;2 J1 y: j3 e* f  A/ R, T
static int count =1;6 `, N; X( B! I6 l1 \6 h4 `# \0 d
4 C! i" `- t& r4 P* H& U- R. F
#define MCBSP_NAME  "MCBSP-device"
9 {( B2 B; D1 y: _
3 o# [* Y# J0 z9 d9 D' Xstatic struct cdev *mcbsp_cdev;! l, p9 I/ [5 k
static struct class *mcbsp_class;
2 R0 X/ |1 a3 l+ b( R6 E6 Nstatic dev_t mcbsp_dev;% S  v! o+ r6 F* Q4 F
unsigned int DRR_data;6 _. u3 }6 G% ]& k7 y5 O" L; y
unsigned int DXR_data;9 `, d) @' N. [% F! h2 \
static int mcbsp_open(struct inode *inode,struct file *file)' E* E$ I$ A% O4 N2 m2 ~3 U
{
/ ?% w4 `2 P8 @' y   " R, a3 K* z7 D# H: w
   //interrupt enable,initialized5 y" c: a2 }, m  |. m7 B# L
   unsigned int temp;$ Z( c* x! q7 Q  W
   //SLEEP_EN(GPIO8[10])---0
0 ]7 ]" [0 F5 j! F0 m4 X9 Y1 Y   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));5 l: w# ?& ]# q
   temp=temp&(~0x00000400);  K3 d: t9 J& J9 z" y* q& g3 e
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]" T7 }0 t+ W7 e4 k! @
  //RESETn(GPIO8[8])----0----1
2 }" M1 E5 R! }/ U   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
  x  U! `1 X$ A) c4 b   temp=temp&(~0x00000100);
2 _' S& Z6 P2 A- f; [6 _   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0, w* \( {- ?& b1 r* X
   udelay(100);, ]8 N7 A, b& a# P! \2 _: R$ \) A
   temp=temp| 0x00000100;
" X3 Z# L, L6 Z# {% ]9 A' ^5 _- K   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
4 E& E8 |8 ]. p5 O   udelay(100);
. N1 E: K8 t' }! ~2 r   printk("open success!\n");- H  X  b( |: t0 g' M; A
   return 0;8 D+ l: d$ W! h/ G8 F8 n! G0 i! h
}$ C+ d& ]( I4 V8 a! G# g

- J/ M# ~+ A+ K/ N1 J1 y7 Fstatic int mcbsp_release(struct inode *inode,struct file *file)9 n' U. g2 @5 F4 t* H
{
( q, a" u' I. o, b, d$ W   printk("release success!\n");
0 c* Y' O6 X; S  t, ]. B   return 0;
. r% ^$ n, h5 O1 }3 T, X}
0 q$ x: k3 _2 m( N
8 X5 O6 J" h5 P* kstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)/ X7 e% Z/ o% N: _
{5 ?% j; b8 A  m' f3 z) h9 w
    copy_from_user(&DXR_data,buf,len);
8 A9 w6 Q) O" b0 h. W6 P4 }8 q0 b) Q1 a    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       , y" {6 {! `5 F8 a
    return 0;
! ?2 f4 r' R8 J- F+ I+ c ( \/ e% y' ^/ C
}' U& I" \- e& t7 v7 Y* U

0 S. t5 E% G; D1 o$ estatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)( j  |, P' w  \! E$ _
{
6 Z) Y; c1 G0 G+ k2 s9 A   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));4 j$ m3 k! C: P
   copy_to_user(buf,&DRR_data,len); ( ^  j6 K* c% ?' g
   return 0;
: n: ^  O% W" f( j5 w3 b- i}
" i1 H# x- J1 C: C$ V  E. N; N, k( {1 v
' ~& e# O6 U$ {/ @' D( A
static struct  file_operations mcbsp_fops=
, I9 d/ `% c; z( @2 s  ]1 m{) p/ b# e. \" _* P: i8 Z
   .owner=THIS_MODULE," x/ j/ |' q# W  J0 g4 v
   .open=mcbsp_open,' t1 ^4 V; g4 k' M2 a+ _
   .release=mcbsp_release,
/ S' V- X: @- \' ~   .write=mcbsp_write,
4 e$ W0 f4 i( i' `3 o: ^# v7 }   .read=mcbsp_read,
. Z: Y+ Z" W0 ?4 ?9 |};" r+ ~  Y. r3 B0 _9 w
static int __init MCBSP_init(void)
1 P/ D/ `3 ^( Z& [4 A$ t{
& s6 j6 d  L; w3 o1 W   int ret;+ U9 y; z- ^+ t4 g
   unsigned  int   PINMUX1_REG_old;
7 A. G! U( t/ o9 r( P& F: r! ?   unsigned  int   PINMUX18_REG_old;5 l, h: B: m: Q. x7 H
   unsigned  int   PINMUX19_REG_old;
" o, J- L( b. l9 B+ o  H   unsigned  int   temp;  
- O+ H1 N+ i( P! o   if(MCBSP_MAJOR)
8 ^; {1 Y7 J( Z   {9 H+ N) f5 t! V8 O* x) c
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);% b: ^- F' x/ q% J
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
* a' Y  j! }" E2 }1 R6 l6 z   }) ]( `8 j1 R* ~6 I
   else
- d. G- B9 y! X6 B9 x* l   {
, j9 [" {7 u/ Y      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);! Z- u8 r  u. {* R' s- L- S: T
      MCBSP_MAJOR=MAJOR(mcbsp_dev);. M( L$ c) l: r% A
   }0 c& q* w( R" D; M
   
9 @; V: Y( m5 ^. \   if(ret<0)) i1 j- }3 }" G! X- E
   {
+ I( ?: z9 p/ A  R: Z( q: P      printk(KERN_ERR "register chrdev fail!");
3 ]* r+ Y" |- f3 }" F' z4 [% J8 x      return -1;9 f8 N  ?* W; i9 i5 a$ a( a
   }& k) x. i) D* s, S! A
   - ~: M; j! n0 C" J" b5 G
   mcbsp_cdev=cdev_alloc();
) V  ^4 t$ g" Q) b2 O% `; `   
1 X- W! z3 l( b$ C" U   if(mcbsp_cdev!=NULL)
/ _3 f. j' m9 p* Y: b6 y" U9 i( w7 a   {7 o1 t$ N% w/ i
      cdev_init(mcbsp_cdev,&mcbsp_fops);
3 j+ [/ `" ?& A( \+ B7 F      mcbsp_cdev->ops=&mcbsp_fops;6 ^1 ~/ C+ h. |
      mcbsp_cdev->owner=THIS_MODULE;5 y- g. E9 f7 ?6 g6 G7 n* w
      0 F. c" [, R& B+ k/ ?" d
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))7 X* a: T* O% S! {  ?3 _
          printk(KERN_ERR "register cdev fail!");% J) a0 s& b* Q3 e3 }2 s
      else
' r6 ^9 l5 V" @: r          printk(KERN_ERR "register success!\n");
1 o! i5 g8 G/ H. L3 E   }: \" D6 _' M, v! Z; Z
   else
/ i+ _; U$ p0 g* C   {
! n- `4 m+ K! R" w: H      printk(KERN_ERR "register cdev err!");
  y+ H% {4 _8 c  B4 ?7 V      return -1;6 }, H3 B4 M4 r# z3 n
   }' p" a& u' b6 k
   & K5 E1 Z* V; Q. J) q, K2 B
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);! D8 M/ K! t( v0 T+ m
   if(IS_ERR(mcbsp_class))
6 g3 w; s2 M: t5 C/ ?: y! y9 H   {
, U, z; Z9 x5 Z& O% x      printk(KERN_ERR "register class err!");
1 W( [4 L, N' j% J& _& ], F   return -1;
4 I( h4 Y' h( V5 t$ K& _* ]: h$ x   }7 j( F8 B- }* L6 K& j- F
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
7 D. d2 w' f1 e# J5 M  ]
$ w3 E: I& b6 P   //PSC7 N# P9 V0 h, [( l- g
   //add Enable MCBSP
6 I9 z2 I* G% k. ~( b0 @   //test
9 N5 D4 y# X7 A. A   temp = 0x80000003;0 z+ p" n3 s. _/ y/ |: q( V
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));1 \$ M% k( P7 H7 ^# F! T
   temp = 0x00000003;
' T# D3 D( t9 E" U8 |   writel(temp, IO_ADDRESS(PTCMD_ADDR));
0 r, X; W9 n% s/ }; W
% M2 t. ]- a4 N   temp = 0x001FF201;
" s* }) n/ ?- m( C5 d; K   writel(temp, IO_ADDRESS(PDCTL1_ADDR));  [: m% Z# K) {5 g5 i
   ! \& s! c. l% ?/ a2 w& w0 c
   //PINMUX  
- s$ |: g2 u) w, A, b$ G   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
2 e+ v' Q5 S: l   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
  Y* r/ {8 x- u   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
- ^( y, L4 ~) `$ |3 j$ k  C   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
# v1 s$ f& a. `# m   
, |" C) H2 b. h$ V: Y   //SLEEP_EN,EPR,L138_SHK1,L138_RC
& L9 ^1 P6 d- d+ s   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
) ~" u! L5 R1 C# [7 {   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   ! U" K# [. s4 x! ^& E
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
, D. k* c) H1 m/ x( y5 `. m 7 H6 O+ e( ]1 `9 K/ p
   //RESETn,L138_SHK2% }; R: N: p8 c4 x& V! j
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
  L  c2 |. l* E  U# o   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   2 y6 F! d0 N( q8 a
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);5 M2 @% a" [+ ]+ {

. Y* {; b5 M4 R& k% S( `5 T 3 w  v9 X6 R# y1 ]' N3 K
  //SPCR Register
. t% B) n8 ^* e3 u7 ~  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset+ V9 u% S7 K# ~9 ]3 \* k
  temp = 0x03000000;//(DLB=0)
% O7 g" g: x1 U* Y // temp = 0x03008000;//(DLB=1)% Z, m- A5 E) |& s5 I+ u/ \, J
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset) o, u: U* r: u# ]" f/ D) }+ {
  temp = readl(IO_ADDRESS(SPCR_ADDR));
; {4 B- j+ c" a* r# h& Z) E  printk("temp=%x\n",temp);
* B9 B3 m/ c2 h/ v( M 9 v( n. F7 y* ]0 s0 l& M
   //PCR Register
; f# v% b& x3 ^0 k# p  U0 k8 \8 W   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0; W) ^4 N6 T  i/ f+ D
  // temp = 0x00000F0F;) L3 |( O" ~9 I! @4 n( K
  temp = 0x00000B0F;$ e: @6 I- X* s: O/ S3 h2 g
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
4 M  M% e6 [% c  temp = readl(IO_ADDRESS(PCR_ADDR));1 q! Q  r) Z1 D& a: B/ ?4 P6 b& g4 `& \. A
  printk("temp=%x\n",temp);  
8 Y7 ?% a- u& y+ k   //SRGR Register
7 O1 R! n; l9 d: F   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11: f0 s. U, J9 i2 T+ W
//temp = 0x301F000B;
2 R' N- e) d+ p; {. f   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
+ T: Z* `5 H7 e' H  temp = readl(IO_ADDRESS(SRGR_ADDR));
* _( G8 \) H& h+ _  printk("temp=%x\n",temp);! A  o' K1 }1 M/ l% |
   //RCR
4 j6 ?. n1 M0 l4 x% r* R) T   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
0 d% D2 v/ M; F% z* h  V/ I   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-03 {2 h: _0 k" o8 b' c
   temp = 0x00440040;' H: F& a8 f5 P. P6 R
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized     |6 G) E1 J5 l* y
   temp = readl(IO_ADDRESS(RCR_ADDR));# m' K. {. o% b- A6 Q* I& ^8 G
   printk("temp=%x\n",temp);
1 U' n4 _8 [* {: x( A   //XCR
  _  ^! n% H& O2 X6 ]1 B' |; W   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
* I( g, k) x2 ~/ D1 v; T   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0, ~8 C. I! y. C3 n8 r
   temp = 0x00440040;6 J; V  O5 ]% F+ W: N
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   ! z; e( U% [' k  w( f
   temp = readl(IO_ADDRESS(XCR_ADDR));
# s7 J, P4 ^' U$ J: K( z- s: b   printk("temp=%x\n",temp);
3 G; v& L3 U- H8 w7 G# j  udelay(100);$ q" V$ p- q( t; N
  //SPCR Register; e  D2 }  s  y$ s* P% A/ b
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1. J' I% s- O$ M6 z* N
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
! l+ q" g" A. z! f  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
) [+ W" a" F! l/ L* M  temp = readl(IO_ADDRESS(SPCR_ADDR));
. t' y. L8 _+ e" e) C  printk("temp=%x\n",temp);
7 q$ P* Z  \& f3 C( z: _5 `! \  udelay(100);# d+ e6 U; V) J

) e! L0 k5 Q" K2 J5 R* n  //set GPIO direction; c+ k* `5 y5 j4 i
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
/ ^, O# ^1 @8 N6 Z" h+ J/ ^   temp = temp | 0x00000100;//EPR----input
4 S) f1 ]0 B" t. d   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
  K7 X  k5 p! U  t" R5 W   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 2 [$ f: R/ X/ \
, K& |6 v! B8 ?2 d5 j
   return 0;
- b5 K( c2 X' J5 ^3 y}7 l4 G% Z1 T1 B& k+ @  l5 L3 J
static void __exit MCBSP_exit(void)/ L2 I5 v) S% E. m4 d% \+ W
{; @( T# }' v8 }4 e. E
   printk("mcbsp chrdev exit!\n");7 ?1 ?4 \) b+ G/ _: p! q( z
   cdev_del(mcbsp_cdev);: v7 b6 C% Y4 ]: C
   unregister_chrdev_region(mcbsp_dev,count);
& ?& U6 A- ?* F4 a+ V+ x" D   device_destroy(mcbsp_class,mcbsp_dev);
: r5 @* ?, _! ~& @. ~0 z3 z/ y- C   class_destroy(mcbsp_class);
! b& D+ M% x8 |3 m: s5 F. R5 p}
# ~" o$ q9 P. Mmodule_init(MCBSP_init);4 D  }% \8 X. r
module_exit(MCBSP_exit);
1 _/ o! d0 p6 W" R3 o
* N% [& @3 N% e( c* k8 z+ JMODULE_LICENSE("GPL");
, C7 K! D9 b4 E6 G# P# L" u7 z4 \
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
% e1 V% W( `8 }4 ?( U  T' n我的应用层的测试程序如下2 i1 g3 E# c$ F0 {( P3 k
#include <stdio.h>2 j, G# c0 `" h/ S6 M
#include <string.h>
( f' s. f' c% v#include <fcntl.h>
1 g( M% {1 B: F2 B5 r$ m  I#include <unistd.h>/ Q- L5 D' C! n2 c1 n
#include <signal.h>
. ?) x% s, Y! A% c+ U, D#include <pthread.h>       //线程$ c1 O8 d  ~7 m
#include <stdlib.h>! J! p* I) V  C8 }3 V' E- c5 S
#include <pcap.h>          //捕获网口数据
4 Y& S, e) F6 t: M#include <semaphore.h>     //信号6 S7 M- w+ Q. H% v
#include <sys/types.h>     //消息对列7 L" P, x# e9 C; @6 |+ B
#include <sys/ipc.h>       //消息队列
- K( e0 ]) K( D5 n1 V& Z; O#include <sys/msg.h>       //消息队列
) l1 |1 a& ?; N% l4 {  N* ]+ d: A#include <sys/select.h>9 [4 C3 m( p$ ^$ H+ M
#include <sys/syscall.h>$ |: @) L8 X' R# a
#include <sys/stat.h>
4 l+ E) J, _, D: Q8 a! s( U#include <sys/mman.h>
/ I  V( M5 g! Y4 z1 J#define msleep(x) usleep(1000*x)3 l; N. B/ g7 N4 T+ y/ B. |2 w
$ @4 b9 E5 W. e2 w* R5 w: p
int main()1 ?% l$ h5 w0 l
{
7 m0 v( q7 R2 g! U, j7 |7 }: k    //MCBSP,ARM与AMBE2000交互设备
0 c+ V7 Z# G+ C! o. U0 ~ int fd;( P& h3 |+ r/ x) l6 A5 E
unsigned short data_write = 0x5555;, O8 c! L0 [! s/ P  C! d; q" K
unsigned short data_read = 0x00;
* H# N! @5 X" R9 ~2 t; _* G  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
1 u/ v6 p9 {3 X( h% u* _ //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);7 X, O  l4 P  g6 q$ |! W
    1 t# W7 e5 K" e% a4 l* @
  if(fd < 0)$ V% Z% p  m3 T$ V' C# ^
  {
6 \% J  I8 r" g$ ]7 I$ d" `     perror("open failed\n");
6 u- N3 N  ~; e4 p& J     return -1;
' S  R' }. ~3 p' l- Y! p7 y  }& Y& x+ I; w. Q1 c6 v
  
% P0 Z8 Z0 Y3 |2 U# T. J. T  while(1)% {: ], \5 U+ T. T! M! t" G3 d
  {' ?- d3 q% b, v* y+ ?5 h1 f! K
   2 `0 E) _0 Q0 h8 n; r( }4 O% R
   //AMBE2000每次读写是24个字为一帧2 i+ m* w1 a" G; N7 J+ E. n
   //写数据时将数据在底层存储起来,等到中断的时候再发送
. H$ I: `4 ?( X$ k# ]& o   //AMBE2000输入数据是以0x13EC开头的2 s5 p5 Y2 I( U' M
   write(fd,&data_write,sizeof(unsigned short));
; e! \( n! p3 ~( n! G* ~5 [% R   
) _! c/ ?# ~( p  N7 @7 |1 D   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
  D6 c! L( h/ s   read(fd,&data_read,sizeof(unsigned short));
: G1 Q# s8 J, C5 E! F   , Z1 ?) R, \! U; D, ~4 |& K' B
   if(data_read == 0x13Ec)2 d$ c$ r1 x, o5 ?+ @- z/ e. \
   {* P: i+ M/ T& s$ O' j0 T
   / b* D# W4 d  g1 v
    printf("data_read = %x\n",data_read);* M, V9 p' S/ l* F$ n
   }6 e: G1 ~! i  a/ N2 s& F7 C
   * D$ d4 q6 G' P1 ^/ c! T
   msleep(10);6 D3 T, i) X( t& D
  
" T, l" Q, ~+ }' N; t  /*( D; q4 R; @3 V
   ioctl(fd,1);   . `, p) Y; F9 |# Z6 `9 e1 G
sleep(1);
+ f: p7 m0 S  E" F  R$ b2 c ioctl(fd,0);9 R) B: M3 A- w: N& c* K3 o
sleep(1);* f9 m( Y* M3 \: |$ q) ?) s
*/ 4 s: {, u2 J5 G
  }   $ L: y# ^/ V% o8 x, J
return 0;
5 q  R$ l0 H/ [' u  y# A9 a& J
7 L3 w* d6 ]6 r6 i: y}
. f" U+ H7 o2 p5 C+ q7 `* x; G
% b' H2 q% U6 A多谢各位指教,谢谢! 急9 v3 Y8 @) q3 @& z1 f
, Y+ H6 B% ~4 S8 N) B  s$ Y

' R/ V# C' j+ v5 t$ D6 M1 L# y$ R  @# F7 Q/ h1 V6 }8 a- J2 k

" K" b0 {4 g& d+ I# W8 Z! V
- e. r6 y4 _3 d& a; `$ N. q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 20:03 , Processed in 0.047993 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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