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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 6 s' b1 t% G  e: R* p, }2 [% v
/*
& I" y- D. o- F. ]0 t0 E$ e * Copyright (C) 2009 Texas Instruments Inc
% q( X2 M6 c/ T *
7 l5 K4 c2 s3 P7 k) O * This program is free software; you can redistribute it and/or modify
* F7 W& }* l2 T * it under the terms of the GNU General Public License as published by  H; C1 Q9 \: B8 C
* the Free Software Foundation; either version 2 of the License, or! P0 w& b' U9 `
* (at your option)any later version.
6 X# t  N% `, B- Q4 J8 k# }  t. } *
% ^6 m7 G1 c# Q0 Q+ q. s * This program is distributed in the hope that it will be useful,
' T4 [6 S6 j7 M8 W+ F0 w * but WITHOUT ANY WARRANTY; without even the implied warranty of
& B* g) _  U# [3 a5 `: P7 y. H3 C# J( n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ u+ D$ q* b& t& k# F; j: U
* GNU General Public License for more details.
0 l+ e" w& i+ I% F- ] *& a2 g' y: G8 O8 ^7 W* g) s
* You should have received a copy of the GNU General Public License% b3 t8 |- b8 U0 Z1 t
* along with this program; if not, write to the Free Software
- Y0 c1 x& M8 q- r6 {, A$ [ * Foundati; F& Z# p, O4 k! R, B+ I
*/
+ {9 s9 q4 o4 v" H: \#include <linux/module.h>$ m8 m$ B. Z0 |8 b  [
#include <linux/init.h>
  N: ~, R9 O# t7 I/ [0 [# c' F7 P#include <linux/errno.h>
2 K$ G% F2 w: y, F- C#include <linux/types.h>
4 b1 U( Y/ L0 o- |* H" x#include <linux/interrupt.h>4 Z0 e! W4 p4 i5 }
#include <linux/io.h>& d5 c! y* J/ p$ z4 G/ N3 y) H& S
#include <linux/sysctl.h>
+ o% v- O5 G- I. ^: \  `#include <linux/mm.h>
! E0 \8 ^7 M* k! J0 X- c8 I. n#include <linux/delay.h>
& ^( A" S: G) B9 G1 i9 ?+ o! F* [#include<linux/kernel.h>
3 x8 ^% ^+ k  }" _4 U5 e#include<linux/fs.h>" h' M/ Z9 w& G! Z
#include<linux/ioctl.h>
' D+ ]( c* [8 j#include<linux/cdev.h>
" Y. p$ z( C% W5 z7 C#include<linux/kdev_t.h>: A( `9 Q) R' |- d  t
#include<linux/gpio.h>
+ e4 b, R6 h! L( o#include <mach/hardware.h>; F; f& ~: j0 U/ k
#include <mach/irqs.h>) J# F* ]. V% c9 E; c
# O; s+ N8 m5 ?2 c1 K
#include <asm/mach-types.h>
. q1 S1 ^7 v$ k' L#include <asm/mach/arch.h>
; y! r. ~: }) ~/ ?2 J* W4 C# v( Y# P#include <mach/da8xx.h>
4 J1 X' s. j( V+ D9 _#define  SYSCFG_BASE   0x01c14000
! H  S  o& Q# ]+ J# }' W#define  PINMUX1_OFFSET   0x124
( ~/ q0 j( s- a8 o#define  PINMUX18_OFFSET  0x168 7 R6 E4 G* D! A
#define  PINMUX19_OFFSET  0x16c7 E# {& M) F) z; i
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR; V5 S/ h+ `, W* }. b0 ]$ e; q, p
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR  x3 }! S, ^3 L, G( Q0 F
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR# f9 `0 E8 J/ S. n
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
2 |9 V7 f# c' ~#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
6 p5 M: S$ D5 g$ D. W' e( @8 ~                            5 X9 z* r! A' J
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
$ {! L0 R/ r8 a: ]9 z- [/ H' ~#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
7 V6 ]6 K2 Q9 F) X% U% ]//PSC
# D% F2 {+ j1 x: x+ C$ V#define  PTCMD_ADDR   0x01E27120  
  p' S; }* S& u) h0 q  E. ?#define  MDCTL15_ADDR 0x01E27A3C% b2 J* O/ B2 M. b- v/ J
#define  PDCTL1_ADDR  0x01E27304# O2 v2 t* x2 `  {( E
//GPIO8 direction: V" B; J9 O. q. k
#define GPIO8_DIRECT  0x01E260B0
6 ]1 U! X* \& C' l  k  `$ e5 Z#define GPIO8_OUT     0x01E260B4
( X# ~: S/ [+ F. H  v- a#define GPIO8_IN     0x01E260C0
; E4 z" @$ w$ ]
) B& G: h$ F0 V% i& o6 g; T//#define MCBSP1_RINT    99              : ^% z+ N* O$ ]3 z) T
//#define MCBSP1_XINT    100  
- q& b3 n* X3 V+ y2 \static int MCBSP_MAJOR=239;# T' {) ^. t( r$ p. Y9 S% k
static int MCBSP_MINOR=0;
3 \  h' L, h+ L" K3 n9 o" u3 p) xstatic int count =1;3 l# O0 d8 }; S  o

5 [& G% e. r: Y2 G# g- i#define MCBSP_NAME  "MCBSP-device"; a0 F5 ^1 x' U; Y5 L2 e/ U: m

5 a8 C. h4 I: ?, A7 n% z& f* istatic struct cdev *mcbsp_cdev;
5 D8 }% r6 P+ Z- c( d; Istatic struct class *mcbsp_class;4 v* p+ N0 ~! u3 o
static dev_t mcbsp_dev;
3 ?( _; h: S3 e2 {% r/ @) B  Uunsigned int DRR_data;
8 i; h1 X( v) g" bunsigned int DXR_data;
' z' _+ p# m+ |& @0 sstatic int mcbsp_open(struct inode *inode,struct file *file)& u* q0 Y% j9 h0 J% z; \. p* G2 n
{
: R% C* M0 S6 r) x, A8 R& j' ]6 S   9 ^" r- G- E0 ^- l# J
   //interrupt enable,initialized) f4 t, f0 T+ E7 \3 D- z
   unsigned int temp;
( z; D8 {  z: }) |! n1 o( D5 x   //SLEEP_EN(GPIO8[10])---0- G; S. O, P% j5 J+ C, r' Y5 j
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
' w, l8 H' X* Q, s6 ^   temp=temp&(~0x00000400);/ Y- Q* V5 d3 @1 R
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]+ U+ B* p- a& r' j" n2 O
  //RESETn(GPIO8[8])----0----1
/ J; ^) x' j: J( f   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));; K) w- T/ f3 K1 V3 W, y
   temp=temp&(~0x00000100);
- u: ?; }6 Y$ W2 Q- T& Z* x   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
# x: i( z5 G( G9 q   udelay(100);
1 N- B# k0 t- g3 g7 r' t' U   temp=temp| 0x00000100;
) L: _( q9 k" @( ?- n   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
5 T! A$ Q  X8 O% ~   udelay(100);8 M( q$ _8 C* P4 h( D% o4 C
   printk("open success!\n");+ L3 C' \, a* D! u
   return 0;
4 i& ]% q; c/ D7 d}% N! c4 p; L. n; `# n3 k& z& R

. J6 ~, `& X: _static int mcbsp_release(struct inode *inode,struct file *file)- W# B" i! G7 P% w& V
{
7 C- r4 K# k  R) ^" B   printk("release success!\n");
, A% w1 j# v; r+ o2 w; z2 j   return 0;9 O- @. u4 ~; |7 ?
}2 f9 v/ w9 x% v5 L: k. T
) Y& w9 l7 e/ H; Q) Z7 g: s( R- [
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
+ x* ]( A/ q3 J/ l' p! r& p7 i" c{, N4 J  t# D; l& G) b
    copy_from_user(&DXR_data,buf,len);+ d9 k7 G7 d) a# X' b
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       : ~$ r9 E# n" B0 p1 Y% @
    return 0;4 L% t" Z, p, X0 p
  u# d- _# u( q- k
}
  J- E, c' U8 J; G6 C+ d
( f& O/ m7 P  Cstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
* ^; P; D  i. S{
$ G# |. O4 B. D8 E   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
6 |8 X% V3 G0 ^2 g: A   copy_to_user(buf,&DRR_data,len);
. |+ A5 I8 H' m' Q   return 0;
. X- z, k& I; ?4 d0 A}
' w  |, O# d3 E& F0 {* I1 g  t# }
( z) I) S- ^" f9 s* A6 D# v. _$ ?
" L3 Q( r( g, K6 ]( ]3 M8 x. |8 h! kstatic struct  file_operations mcbsp_fops=
" J3 p9 X+ |$ ~* R! ]! \( Q  a{
5 q; ?( o8 Q( y1 \   .owner=THIS_MODULE,
3 t( {6 Q8 n# z+ n; \   .open=mcbsp_open,
7 R% s" c+ R2 j/ E# {   .release=mcbsp_release,3 ~. T' Q: A( E$ _1 v2 I
   .write=mcbsp_write,: I+ A4 f' W! B
   .read=mcbsp_read,% H: {$ y6 ~6 ~! x+ p3 V3 Q+ ~( o
};
1 w9 I  E4 M) B  L7 Fstatic int __init MCBSP_init(void)$ i! e* U9 u1 x0 O% ^
{! D9 D( P4 t; V. E. t
   int ret;8 P; H4 q- l0 _1 u7 v
   unsigned  int   PINMUX1_REG_old;9 s- E3 _5 t6 C7 _
   unsigned  int   PINMUX18_REG_old;; p' l* M2 T- I
   unsigned  int   PINMUX19_REG_old;
  f, k0 Q- m  P4 c  k   unsigned  int   temp;  6 X$ m$ d* v$ t9 X' d
   if(MCBSP_MAJOR)
# I/ A% {9 b* c. J   {
: x$ l$ ?# n' ~4 x8 ~      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
+ b9 O) _/ Z' X% i7 X      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
8 z5 P% r, l! l+ y4 j" K+ ?# ~   }% d$ Y3 Q* R1 T0 {
   else; g2 v& V& j$ y2 s" A
   {
' j' V6 T8 g; e, `1 O      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
1 m- |6 |$ H; ~: ?' j0 V/ f, `      MCBSP_MAJOR=MAJOR(mcbsp_dev);4 v% q1 \+ r  T! U4 b/ U9 L
   }* n4 }' k3 b$ f1 ?! U
   / w' c, S! C5 L: P* z
   if(ret<0)! _* ~5 Y8 Y; I* A; t# n
   {+ U; r1 u/ J% I4 S) l
      printk(KERN_ERR "register chrdev fail!");
/ R2 F" `: a4 M0 i" R9 d      return -1;
, R$ D" h1 B  E; j% U) f   }- k9 Z# U2 _, L% A, ?
   
% ]+ V3 G8 f' p   mcbsp_cdev=cdev_alloc();( g: W, L7 x3 D1 x: g' a( {$ q" e
   1 e# M/ R3 e; m1 [
   if(mcbsp_cdev!=NULL)- V0 w9 P0 f7 F
   {
" q  G# H9 A/ T. W      cdev_init(mcbsp_cdev,&mcbsp_fops);
' W% N9 _) h3 o1 \# V; R' X      mcbsp_cdev->ops=&mcbsp_fops;
2 S3 R. P' t9 X& Q% T      mcbsp_cdev->owner=THIS_MODULE;
7 s+ m( F' x% V5 a- T" ]      : T" M2 u0 V$ V% d) \2 |, n0 O
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))' k- Y7 z0 O1 B
          printk(KERN_ERR "register cdev fail!");1 j# A; i; j: a2 b1 T
      else/ y7 b! ~' w1 g" o
          printk(KERN_ERR "register success!\n");
4 v4 x  s& J7 B/ a   }
: K3 q% o) V, B; b1 p   else
% [  g0 z0 W% N   {
$ L6 e5 Q9 h2 n" N      printk(KERN_ERR "register cdev err!");! q9 {! ?/ p% `  d% ^' x; a
      return -1;
" @: a0 Y* D) H, u   }
; N1 J  U$ X. A4 [2 C5 x   , K. i( ?  J5 G! B
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);- _* y) Q$ I" w8 f: N4 P
   if(IS_ERR(mcbsp_class))5 u& `8 X9 o2 n
   {4 Y7 s5 u6 n4 i) y, D
      printk(KERN_ERR "register class err!");8 P  \, t3 U/ P! t& ~
   return -1;
- n+ C& z% l0 I+ {* l   }
& e7 T' j+ P& l9 j   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);$ ]# a% E. ?4 e+ i- Z

7 u* b0 b) ^5 [   //PSC3 e$ {3 h. M2 E) n
   //add Enable MCBSP
) _9 b) y6 j5 K. Q" Z: M   //test! R5 K0 W3 l8 ^( i
   temp = 0x80000003;/ [  |5 E! G2 l( z6 w
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));( Q; @( R) d/ V2 c4 A! W
   temp = 0x00000003;
- a3 t3 i- I# W6 d# x- E. C% w, S   writel(temp, IO_ADDRESS(PTCMD_ADDR));7 Z7 X5 D3 }8 i  l0 \6 `6 |

7 E5 S5 f5 t5 a3 ]8 e+ s! ~   temp = 0x001FF201;
. }1 ?; J7 j$ H4 \; d   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
+ U$ w. S( T# @   8 Z) U5 d, k# I9 I
   //PINMUX  
3 i+ X* m/ r9 t   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,' s0 W2 }+ K# i4 ?; H' s
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
% c# n" k4 m! f' C$ ^2 R   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
2 ?" G& C' J6 s/ [- B7 x, Q   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);3 A$ C- Q& p7 h
   + O; o* ^# O' ~3 k0 J5 r) A- u
   //SLEEP_EN,EPR,L138_SHK1,L138_RC  ~/ j/ L) I& N5 E
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
% O2 n! E! g# n3 S. M   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   8 z5 |( Z& j8 O+ u) v% `7 j7 T
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  B* M) h; a3 i. Y

; I* R, `; t- e   //RESETn,L138_SHK2) r4 ^/ {7 u) d- V- |7 U
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
! l! P0 @0 n% l' J# v   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
  ^; M* n- n8 v6 z) [   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  B. g2 D+ |" @
# b: a4 c7 E8 K: M& |
4 \- L6 E, f, c+ q9 ^& V
  //SPCR Register2 Y4 h, X+ z3 f- p
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset# V0 @8 }/ T4 p) R4 E# J
  temp = 0x03000000;//(DLB=0)
+ C, w2 q, `5 h+ {1 W6 \( {: X // temp = 0x03008000;//(DLB=1)
6 o% @- H: J9 h& z  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
4 g$ a$ Q/ e  u% n" v- D8 G  temp = readl(IO_ADDRESS(SPCR_ADDR));
, k2 b/ j% i. c- n8 c) X  printk("temp=%x\n",temp);
2 e5 m& f8 y4 u: S; @0 _ 6 p: T+ I3 Z2 e7 Q7 F& \
   //PCR Register, V" S# A  G6 q
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
) t$ r0 L# B2 p2 G) z, W5 v' ?  // temp = 0x00000F0F;
  F2 N& F8 X" Q- m* E" a  temp = 0x00000B0F;
8 B3 Y* g) h  j$ J  Q  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
* T6 E6 T9 M% `1 T" q8 @9 W  temp = readl(IO_ADDRESS(PCR_ADDR));7 L# _9 a  o( M( |
  printk("temp=%x\n",temp);  / O. _2 e  O% v: p7 L. R
   //SRGR Register
! Y' F2 j. O" G3 q5 W) `   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11/ G- K: r5 Z: Z8 P
//temp = 0x301F000B;% f' S0 X' C! p4 w/ l4 v
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 2 ^* g+ O4 B( y0 U" i% Y: g
  temp = readl(IO_ADDRESS(SRGR_ADDR));. F/ P3 }/ U3 w% e: x, L0 z
  printk("temp=%x\n",temp);
, p5 f; N" m% W+ u  k* |   //RCR8 a* I+ H- z$ x$ s- S
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,2 ^+ |2 r9 h0 D  u
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-02 a# v5 @, {" f& h* a& \; x
   temp = 0x00440040;3 i/ Q3 I+ i$ f2 o
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
* p( s- Q- M2 t# r0 Q7 h' ~   temp = readl(IO_ADDRESS(RCR_ADDR));
2 f% A4 J& g: H( h' N: {   printk("temp=%x\n",temp);1 z+ {- f5 m2 l* ~/ P. E9 `1 I. m, r
   //XCR( s6 I3 w0 C4 p1 D. n8 N
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
) ]5 G: m( i( s/ N% L! ^! o   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
5 \4 A" S( d' t/ L/ I* D   temp = 0x00440040;
/ b6 _! e+ r7 `+ t: @1 \   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   $ ^# a" f3 b5 m5 q9 O
   temp = readl(IO_ADDRESS(XCR_ADDR));
% h7 {0 k+ Z. E   printk("temp=%x\n",temp);
7 u6 j# s6 Y+ u8 {! k( q- W  udelay(100);" Y' a1 {. Y" S
  //SPCR Register
! k; k; [, o6 Q  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
8 x& X! h! D7 A& I  temp = 0x03C10001;   //DLB = 0 VS DLB = 1! y7 S7 L1 i3 A. C  O' {% {
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled  C8 X8 E. ~% g% G+ i9 g9 |
  temp = readl(IO_ADDRESS(SPCR_ADDR));
/ p! H9 j' z+ n  printk("temp=%x\n",temp);
; [( ]9 p' i) }! Q5 W  udelay(100);9 C$ Q1 x! l8 L, c6 \4 j
. f1 W0 ~- F4 G( b
  //set GPIO direction0 b' G; n4 T" [. F6 k  p: w* b
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
+ I3 ]( v0 J8 K   temp = temp | 0x00000100;//EPR----input3 ]+ C1 |* [$ M, {4 g
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output; }/ y0 |2 e/ ~8 [" }% w; I3 M
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 0 q+ O! _% O; L  d; k

3 U3 n. W6 d( @. a# ^   return 0;
7 n' n3 {8 q" J}
& i. C- f) {" Q0 Nstatic void __exit MCBSP_exit(void)
; K+ _& d  D7 u4 A- o{
3 f' \$ E$ _+ R( K; a$ m( `, V. A   printk("mcbsp chrdev exit!\n");# U3 t9 c9 d- S' ~2 j8 @! m
   cdev_del(mcbsp_cdev);$ b! x9 |0 e- J2 ?! R) s: l
   unregister_chrdev_region(mcbsp_dev,count);
8 S7 p8 G5 F3 l- l   device_destroy(mcbsp_class,mcbsp_dev);! |* w$ ~% V9 [& R
   class_destroy(mcbsp_class);
- K7 ]: g% s0 T# ~  A9 [}
% i8 q6 \5 W  M& k# Cmodule_init(MCBSP_init);  I, o! @4 x8 k  D: N3 h- G
module_exit(MCBSP_exit);% z; ^( Z. ^: p% q6 B1 `5 a
5 r/ g* {2 u0 a+ V$ B
MODULE_LICENSE("GPL");; X: d% N1 }$ d: w  R

* H5 s- Y" U: |8 {1 T% h我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
, F( f  k7 [# V5 e5 H& N+ \我的应用层的测试程序如下
' g! O0 q! d, j( D, k% Y. ^#include <stdio.h>
8 {6 d! p2 M8 Q# S1 o$ T9 {9 S( v* f#include <string.h>
2 L$ L* V8 e4 x$ V: H, x#include <fcntl.h>
% N) F3 O2 c& E$ ?) {#include <unistd.h>9 ^" o# F( v+ q/ m
#include <signal.h>
/ w3 C# x: D  k% e2 ]#include <pthread.h>       //线程: w' M8 d. g' M7 B0 c) P
#include <stdlib.h>
) W! Y" I. B' f4 M4 [; r9 \$ l#include <pcap.h>          //捕获网口数据
4 ?+ U6 s7 M0 R# G. j4 [: n' W#include <semaphore.h>     //信号& M6 D6 T9 y; ]/ H" n$ V
#include <sys/types.h>     //消息对列
0 y) \5 E/ a8 o. n#include <sys/ipc.h>       //消息队列# i4 P( w* F7 E4 l! l
#include <sys/msg.h>       //消息队列
1 d& d6 a) i  |1 f# L#include <sys/select.h>2 R8 ~- B2 m: K% v+ R( V/ ?5 a
#include <sys/syscall.h>" X+ d0 r3 A& y! W4 T( o
#include <sys/stat.h>1 _  k! c# A' h& s0 y
#include <sys/mman.h>
4 k. w3 F. e9 J8 T1 Y  |#define msleep(x) usleep(1000*x)! k  @9 d3 N& R
( W3 t5 N' f. ?  O# H# u
int main()) U; t% k8 V% G& S2 u' P  G( W5 c4 a7 e; j
{
- V# u% w- \8 r; N# }7 S    //MCBSP,ARM与AMBE2000交互设备
* J3 H, q1 Y) f2 O: l int fd;
2 ]9 R7 t+ A9 W4 z+ T7 x; \ unsigned short data_write = 0x5555;
1 a8 U2 K, g$ O; J unsigned short data_read = 0x00;2 b( E7 H, ?+ Y7 j
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ ?, v# Q$ v* m, v //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
# [9 B- m5 ~- A0 v% l# T& `# V+ K! \   
( B9 }7 l9 V3 M. B: }: l' J$ H  if(fd < 0)- q* n5 P4 u: n
  {! _( \6 m* Q) Q/ W% F
     perror("open failed\n");
8 j7 s* q# j+ Y     return -1;+ s5 Q* q, k; |3 Q. c% F2 F
  }
, K$ X) A3 `6 L* e5 s) j  
4 u( t. }' U- r0 F" J- o( }3 _  while(1)( e5 x7 R5 l1 ]
  {
; ~9 |9 O+ u' p1 E3 f   
9 G" l& w; X7 m5 t  V+ j3 R   //AMBE2000每次读写是24个字为一帧
1 ~' L: M) r" {- C1 f   //写数据时将数据在底层存储起来,等到中断的时候再发送
) `# h0 s: q4 B3 Y   //AMBE2000输入数据是以0x13EC开头的( }9 l; n7 i3 G
   write(fd,&data_write,sizeof(unsigned short));1 C5 K7 p1 N% {
   
# g1 R7 x8 A, H6 _% j- z   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  8 y+ Z0 b  y7 D7 S  D- [
   read(fd,&data_read,sizeof(unsigned short));
3 t# {; f: [4 ?) e$ N5 f   0 Z$ C8 x' W, r% N3 x- C, n1 ^
   if(data_read == 0x13Ec)1 l' x- W/ K2 u0 a3 E4 E
   {% B2 @: o) d! F0 c0 r/ ]
   
$ }2 P1 p' `; M  ?    printf("data_read = %x\n",data_read);+ l, E( C8 H0 l9 e
   }
' z5 y6 f( }/ Y4 X- B1 U   5 a  I- M, `  Q
   msleep(10);
/ }! H$ k) h. S/ ?6 X1 M* V  0 F' {: q- q# c; y) L- v
  /*: d- g8 A/ r0 D# }. `7 X5 Q$ A* U
   ioctl(fd,1);   9 ^1 a6 m0 a+ F
sleep(1);
6 W7 P) _: e7 s4 v4 H+ [ ioctl(fd,0);# f8 y4 j- f8 R& _( H( `0 `- ]( N
sleep(1);6 w/ D! W# T. w/ o& U
*/
- c# [; |) Q; j& a/ O  }   7 Z6 d. X1 v  ~0 U- m; W: o, S
return 0;
$ c0 d! G9 z6 |  j' ~5 a+ f$ I: Q* F7 F
% R5 i. Y( ]  t1 [6 i( U3 ]}
$ {4 M) h; Y3 Z, q% {) E
% J- R" r; v6 v; o$ F多谢各位指教,谢谢! 急
; Q" z, J0 ^+ |$ i
2 `: K* R1 R' w3 D: ?) Y& f7 n/ _' ]2 l- o" Q  P  v; j4 H
# ]0 G8 C5 a7 E2 W: C* b

& _8 v& e+ E, i' Y6 _) C. T1 T6 B% E4 {) J# l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-27 17:19 , Processed in 0.075750 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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