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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
* `. ~  g3 d5 V/*6 X6 J; F4 v; j7 L* T* b
* Copyright (C) 2009 Texas Instruments Inc6 {  F4 _1 I, x+ K1 c' x1 @
*) O1 o7 Q* d! _7 f
* This program is free software; you can redistribute it and/or modify
5 C# P% ]( k0 e' L' \ * it under the terms of the GNU General Public License as published by" Z3 R/ e9 ?; s8 @. m0 O: }$ u
* the Free Software Foundation; either version 2 of the License, or
2 u' T3 A! m: x7 q8 \ * (at your option)any later version.
$ j6 N5 @0 c: n- v/ ~ *# [+ G' i# G* {
* This program is distributed in the hope that it will be useful,, b% w" T' @1 L
* but WITHOUT ANY WARRANTY; without even the implied warranty of
2 k/ I/ z$ Y7 q+ r4 `; [; T * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' e0 F/ F4 K; H( h * GNU General Public License for more details.9 }+ v1 s9 J: _, Z
*
& P' B  G+ p1 B * You should have received a copy of the GNU General Public License
( o! H) V; c* J5 R7 V * along with this program; if not, write to the Free Software& O; s7 L4 ?1 k8 P' R
* Foundati" `/ e7 g: W. K1 A! ?% x, J" i
*/
, \" d* I& S1 r  F6 X#include <linux/module.h>
" D; t# b. M4 W9 d#include <linux/init.h>4 x6 V. d: g5 P( R
#include <linux/errno.h>1 G; f) M' X* R/ d: g
#include <linux/types.h>
4 T# \. i+ e7 K! z! Y0 |) w#include <linux/interrupt.h>4 i9 \' Q! `' h% d* s
#include <linux/io.h>& ~* Q  m$ `9 E. o+ f. k( [1 Y& r1 y5 z
#include <linux/sysctl.h>
5 o9 h3 z+ I) d8 d* I  Z#include <linux/mm.h>
/ a$ g3 j3 V, V3 b+ i- x3 i* I#include <linux/delay.h>
# D! L# r5 p2 k#include<linux/kernel.h>+ T+ R& z- z3 j1 U& |$ ?4 Y
#include<linux/fs.h>
4 l+ t' o/ ]/ w; h6 ^' z# L+ e) C/ c#include<linux/ioctl.h>
, Q! Y# p/ U9 `#include<linux/cdev.h>( u- A" {' i: q% H* s  M
#include<linux/kdev_t.h>
/ ?: z- n! `1 j4 {) Q+ T9 z1 A/ E/ `#include<linux/gpio.h>
, p3 k) T) `7 m3 ~#include <mach/hardware.h>+ @. G5 E7 Q( S9 O
#include <mach/irqs.h>- H+ C* v2 G8 _( H( k  p
% o1 C& x4 W0 b# W& v/ h5 @6 \! N7 B0 @
#include <asm/mach-types.h>
7 P, l9 b. C/ U#include <asm/mach/arch.h>$ e) g+ z* P* G" f9 g
#include <mach/da8xx.h>, F% S4 r8 s6 F) Y: X- U8 t
#define  SYSCFG_BASE   0x01c14000
1 F. i1 V& ~/ E: s#define  PINMUX1_OFFSET   0x124
+ v4 x9 X# l6 ^9 ?#define  PINMUX18_OFFSET  0x168
+ C9 L8 K7 Z. {8 ~$ Q2 k#define  PINMUX19_OFFSET  0x16c
/ `- v1 N- Q  ~/ a4 R$ a5 T#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
& ~4 Y# f: M9 j9 ]& ]. j#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
3 L, O+ Q% \0 T& H) g+ q( Z#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
5 x7 [$ b( Q8 f4 f0 S#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR' X: w& a% ?+ V" u
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
: |$ J& v3 y6 [! B5 Z                            4 L: d  l2 K; Q( a+ [
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
6 q5 o" b! N4 ~#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
& f3 G7 |4 Q: Z! D6 J: f//PSC/ }: C0 `7 S9 c* k: N
#define  PTCMD_ADDR   0x01E27120  
0 [( g8 a: U8 A#define  MDCTL15_ADDR 0x01E27A3C
" `" M" W( J! n. L#define  PDCTL1_ADDR  0x01E27304
5 W* p# b* t8 H3 k( W) \# H//GPIO8 direction7 k; U& I5 a9 R; O1 F
#define GPIO8_DIRECT  0x01E260B0
+ Y* f1 t7 K: s#define GPIO8_OUT     0x01E260B4& ~+ K- ~. B- g& M
#define GPIO8_IN     0x01E260C0' \7 E! E) b$ e4 k: }5 O+ K
& g& J* t3 a. w4 r; ]/ @
//#define MCBSP1_RINT    99              
9 }: T* e/ v2 l' L. ?//#define MCBSP1_XINT    100  
9 C: a( ]- X' D  O8 K& }, t- e+ dstatic int MCBSP_MAJOR=239;2 D6 O) x6 M2 \+ [5 x
static int MCBSP_MINOR=0;% J* k- b5 X, k1 J1 y% U5 Q; z6 ]
static int count =1;
' d& p+ j- J; j5 Y7 b4 G# Z$ o4 D9 J5 E- X  V
#define MCBSP_NAME  "MCBSP-device"4 M7 F- u6 s/ D. a5 [; A

7 B* y. A7 A( \6 y* Fstatic struct cdev *mcbsp_cdev;: o" G" D2 j6 S
static struct class *mcbsp_class;
1 R( d" ~% V+ u( ?: a5 Q7 jstatic dev_t mcbsp_dev;
; v1 J6 J' l' V( L* Punsigned int DRR_data;9 W4 ~) ^, S- C( t; A, t
unsigned int DXR_data;2 J2 p& g1 S5 q7 A  [2 \, }' N+ K* P
static int mcbsp_open(struct inode *inode,struct file *file)% X4 y1 B: Y  t: Q1 x' `
{
- [2 {: T. M* g: s  r   
% V* q5 M/ k3 Q& ]0 x   //interrupt enable,initialized
8 i  g: E# y* k   unsigned int temp;' i; t8 C% a0 g& ]% C( e" M
   //SLEEP_EN(GPIO8[10])---0
9 G% T% v/ f& `1 x& H   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
+ _6 i2 b' ~* Q1 s6 }   temp=temp&(~0x00000400);* X2 J; a- r5 E+ W/ K" A
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]+ z' b% M& O( }; F- T
  //RESETn(GPIO8[8])----0----1
5 }% I1 @$ l! ^' y. a5 e7 p( T   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));" |' M2 r8 V2 {/ d" ~' k# u7 `; ]
   temp=temp&(~0x00000100);
3 b2 R' ^( m) _+ B3 I2 b8 ?6 a8 M   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0: A8 ?. V  K# q5 ]0 Q  N: o2 _
   udelay(100);! K/ N$ i- S  H% w& b1 t8 L
   temp=temp| 0x00000100;8 H6 y) p3 [' v: S
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
9 ]5 t8 H0 p4 `  U! U. O   udelay(100);
( Q# w6 z: j( a   printk("open success!\n");
: b" k- V9 s: _; k" G" Q0 `7 z7 c   return 0;& H: Q- V0 ~/ b4 U5 P% B) S6 m
}
" V9 z  ^8 f( l0 |; k3 I+ ~0 B6 X
$ _2 b+ O, h+ B3 T$ Wstatic int mcbsp_release(struct inode *inode,struct file *file)/ v6 @% \+ M$ s9 i, G
{4 ?5 @  \! \  {: d% I
   printk("release success!\n");5 f* B/ l. F: t9 H5 G
   return 0;
" i$ \$ w- e/ j7 a3 @. q}  C% w/ O2 E% S+ _3 A
4 @; h# w4 F; x, I' o/ Q4 m
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)" A' w+ J& `* V
{" E) z9 J! q  D- e# G$ L/ s$ r
    copy_from_user(&DXR_data,buf,len);
' q* p2 v& z1 K% B    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       ' T+ s( f! L5 \6 @
    return 0;
5 U+ W- A$ L8 r% I4 T! }/ s, Y/ S & {: e, F7 f( k! D7 H9 U$ K3 `
}0 ~( N8 o; L- N: K
6 |* M& Z6 i. k9 ]
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)8 {7 P1 z: z0 S1 t. J* h# s4 a
{ ! T% P, l; v; e& F! u
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
! M9 K! G6 m/ \. _   copy_to_user(buf,&DRR_data,len); 1 ]6 \' p0 r1 F
   return 0;
% w; m' ~2 o0 D& }7 c* ^6 e}" ~) {* u0 t0 ~- Y! E- f& v

( s/ J) O. R9 L; \- p( ~* l& D" k
static struct  file_operations mcbsp_fops=7 d, s6 o+ e9 I/ t1 @
{
8 f( e% U# p- Z, _   .owner=THIS_MODULE,: H7 ?2 R! Y5 P
   .open=mcbsp_open,. f% h- i4 A$ I8 g/ Z2 _
   .release=mcbsp_release,& U$ @2 O# d0 h( C- O
   .write=mcbsp_write,
0 X8 i: ~  O# D5 [% A0 W! u   .read=mcbsp_read,4 w6 D0 j. U6 f# M9 `7 U
};3 u$ Y5 b& M1 F7 o* n5 {
static int __init MCBSP_init(void)
  S+ F% ]2 M$ R4 Q2 k{
! n7 w/ [7 M" y# L  J4 S( _7 e   int ret;
7 |; C1 d+ Q, i8 j1 m' F   unsigned  int   PINMUX1_REG_old;
$ t5 |9 n; I: z   unsigned  int   PINMUX18_REG_old;- _: k, f) K3 Q! ^* I0 W
   unsigned  int   PINMUX19_REG_old;
1 b* R, @+ [( i3 g   unsigned  int   temp;  
& w& T( J" S* H  J9 v   if(MCBSP_MAJOR)" {/ a/ X# ]& j+ h* z5 U
   {
: ]* d  G; Y% v* ~      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
) Z  S2 E/ p. I( K6 s* u      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);0 R4 F+ H$ T1 c/ p- d
   }. m2 Y1 w  V0 \- ?$ a" v
   else: b7 n* Q# n. @
   {
/ d; M4 ]1 B/ S* }& ~- @" Q      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);: }8 R; g4 n- p# P/ c& M
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
1 S2 c6 W" d3 S8 }4 V   }# |: F9 C% X" x: L% i" Y8 r- |
   
  F; I+ |8 t3 n( j% X& H   if(ret<0)
$ R8 @$ B: L6 L( G4 I   {( d: L) ?; x+ m) k
      printk(KERN_ERR "register chrdev fail!");. w! b( P. i+ O1 V
      return -1;
& B0 a. [% T& k$ W$ z   }" |0 ?8 i2 Y+ O
   
/ z3 Z. b- a- A: o   mcbsp_cdev=cdev_alloc();
+ p$ M/ ^# U/ M5 p/ R+ X   
9 L' j# p7 K6 e' o( N   if(mcbsp_cdev!=NULL)
! j; U! B. _5 i: c   {: E0 E, o$ y$ r6 J% Y
      cdev_init(mcbsp_cdev,&mcbsp_fops);; c) }5 S) Z2 S6 {" a
      mcbsp_cdev->ops=&mcbsp_fops;# T7 [+ B0 ]  E9 o
      mcbsp_cdev->owner=THIS_MODULE;; I% }9 g0 s, q! ]  E; b8 E
      
2 @" z& r% F( \4 O      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))5 V2 P) }) G, z, }
          printk(KERN_ERR "register cdev fail!");$ x! U; q4 d" f* P: W2 L
      else
; ]- h8 e) |% k( B9 N          printk(KERN_ERR "register success!\n");
/ v2 y& g4 e- Y   }
3 Z- R( s0 \" ^   else
  z: K: C; b( Z5 @0 e" L   {
6 q' z1 W$ S2 I$ f% V      printk(KERN_ERR "register cdev err!");
) [5 ?% p: F2 G      return -1;
' ]5 k* }/ k% W   }) I1 ?/ \0 c* l  }
   , K7 P4 r# g/ Z) L. ~
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);* M5 b4 W; R: Z% U5 R; v
   if(IS_ERR(mcbsp_class))
" e4 M! I: z$ C* [& p5 A2 S   {0 q  k3 l# E, w% c* k
      printk(KERN_ERR "register class err!");* _+ t1 U7 D4 a$ }6 \
   return -1;
- @! c& O2 s% d: i* \* V   }
+ }/ M$ g% I/ M& Z* u& Y   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);$ m( e, Y; s2 Z9 j1 m& W8 P- F

; i4 q( x5 Y" _* u   //PSC" O/ S7 u/ m, g$ ~
   //add Enable MCBSP' Z$ h* O% n7 H6 E
   //test$ j5 D; [. y9 l0 G7 p' F3 F4 z
   temp = 0x80000003;
5 L; Z: f; \) P   writel(temp, IO_ADDRESS(MDCTL15_ADDR));* Y7 P0 ^4 ~- x0 h" E* K
   temp = 0x00000003;
- N5 n7 @/ _- u# p1 u$ b   writel(temp, IO_ADDRESS(PTCMD_ADDR));/ x- k- B1 {( U, }: W
/ j! E3 D% i" e* C
   temp = 0x001FF201;
4 |7 P4 f* g" l) ]4 b2 P0 g# q   writel(temp, IO_ADDRESS(PDCTL1_ADDR));' K8 T7 N" F; `9 d6 ~3 D2 m* o
   9 s; ?& o7 O- Q( [# j$ N/ }
   //PINMUX  & a& y2 r; K1 Z3 o% u, }: W4 Z
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
" W$ R0 [3 b0 a0 W, r1 |! t4 a   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  0 q4 s2 P% z0 H5 W
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ) }  e6 ?" V* v
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);0 H8 v- J% e& X5 d$ w# {8 q, w
   4 s% h3 R2 F' e; {1 b* `
   //SLEEP_EN,EPR,L138_SHK1,L138_RC" ~$ W! ^( i: l" [! w1 Q7 k
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  # h8 V$ @* b: s7 S
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   % ]; n! @7 q0 g+ k6 j
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);: N) q& E. r5 Q5 w

7 R& F2 [4 ]% {  |. L1 ~6 b   //RESETn,L138_SHK29 p# r. Z: p# t7 U
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
8 J: G; |( e! G" U+ y, J8 r   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ( N5 X# C1 Q9 ~
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);, z( b: z: ~3 [

) \# ~! V! y4 R; t 3 N. W; A9 v8 d* u# Z- N
  //SPCR Register1 F" M! C' W7 z. ]8 L/ l
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset9 i) d. J3 t3 W% J" n" l
  temp = 0x03000000;//(DLB=0)
/ ^4 B+ @0 ^, | // temp = 0x03008000;//(DLB=1)2 p" ^; N+ I  K) r* F
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
" k- W* Y. B) [7 u, N  temp = readl(IO_ADDRESS(SPCR_ADDR));1 k! P' b$ C2 Q, J/ `$ X, S& x
  printk("temp=%x\n",temp);
! f( N$ I, @, U  A/ h  | 8 s$ Y! |6 C; n
   //PCR Register
+ r- A5 s9 Z: ?1 E- g   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0, w8 \! z$ J9 z6 T$ X
  // temp = 0x00000F0F;; B: s" E7 g- _: W7 u' n9 q  g
  temp = 0x00000B0F;
( ^) i8 s# {, m& {# Y  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
. q) s# C) r0 P& n# t  temp = readl(IO_ADDRESS(PCR_ADDR));
2 M+ @; |, s, W: @4 |  h  printk("temp=%x\n",temp);  9 e% Q# R3 X2 H- _
   //SRGR Register
; L$ k4 @- H/ C# @! E+ }   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==119 t' D! E+ N' ]* X4 c! B- j
//temp = 0x301F000B;) G' J& u( ?% f4 n  R; R
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
& f! Z1 U6 L3 T% q6 ^* R, J9 y: h  temp = readl(IO_ADDRESS(SRGR_ADDR));9 O* S/ p0 [" n
  printk("temp=%x\n",temp);
+ Q" m' d' l; c# f# A5 ]) ~4 r& X   //RCR' m, D. `" k) G- u
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,5 J. n7 l" r& t6 j0 N7 P8 p: a
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
! U9 g- B# r$ @* g% k" Y; l   temp = 0x00440040;
2 Q0 h) O  y1 r: R- L   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
' b( N3 L; e9 Y% E+ C/ l9 r   temp = readl(IO_ADDRESS(RCR_ADDR));
' E0 g8 B( z  T+ E   printk("temp=%x\n",temp);& O# ?  i! ]- [% h
   //XCR4 k/ s' v+ I# A
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
# `/ m" p' X( |) D0 ?- j   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
% ?6 X# ^/ {1 x  k9 M   temp = 0x00440040;
2 i% _' d* d. s7 P   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
) i/ X# j, @1 H' _  B; N) f8 H   temp = readl(IO_ADDRESS(XCR_ADDR));
9 K4 p  {/ x5 V3 h9 ?% }/ A7 ~   printk("temp=%x\n",temp);5 t% {) A& X" M! N) z
  udelay(100);+ R' V5 Z% _1 O+ s2 t& h% n0 Q
  //SPCR Register
! T$ Y1 X2 g! T( h  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
8 ?; ?' Z. n; E* b  temp = 0x03C10001;   //DLB = 0 VS DLB = 13 S' r$ O. \) T6 {" O0 |, P
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
' J, h) K$ s4 W- R+ u$ z, g- h  temp = readl(IO_ADDRESS(SPCR_ADDR));
; n) f) I  q/ v- W2 N+ g  printk("temp=%x\n",temp);. Y( ]7 F3 c: R
  udelay(100);3 t  T& @4 J5 J/ Q1 T; w+ p

, D. w- G  Q& _  //set GPIO direction
& K0 {/ w" ]- Q   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));2 p3 f7 o) Y; p4 N- a+ l
   temp = temp | 0x00000100;//EPR----input; M5 h4 F: q2 W! i6 J! Z* @
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output  u! h9 \0 s4 f' Y9 e1 L) t
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
1 a$ A4 t9 X* U( ^ * C! g/ M* Z: F" v( t, ^7 n
   return 0;' J" N- J/ y0 @7 k! I* b
}
: \: i/ i+ T; p6 Cstatic void __exit MCBSP_exit(void); H/ R6 {+ v% Z* N- a, j
{  d' M; O+ B$ ?& w$ t
   printk("mcbsp chrdev exit!\n");
$ W7 B$ j% ?' C8 }% G  g1 Q   cdev_del(mcbsp_cdev);& w& c) g" d+ W
   unregister_chrdev_region(mcbsp_dev,count);4 k/ Z, t7 \* Q! v8 K
   device_destroy(mcbsp_class,mcbsp_dev);
. v1 H# u2 a+ s/ e   class_destroy(mcbsp_class);& m; l. Q2 F5 T
}  ~  a4 |( ]5 n1 z2 S. Q
module_init(MCBSP_init);
6 S8 D  d$ j, x2 D9 G; Emodule_exit(MCBSP_exit);
) K5 O6 @! `+ u" t1 B& d2 l' ^  Q' `8 n" w' t$ _* s. r- f
MODULE_LICENSE("GPL");* q6 J, I# T1 e! ~' E% E: t5 l
$ l) f8 T5 s# F0 s* v
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。" i, g4 G  `) t  S4 d$ \0 V
我的应用层的测试程序如下
: H: f) J# U8 P# H1 p#include <stdio.h>8 V6 h* V# W3 I+ y6 p4 o
#include <string.h>  I- h6 E2 Q) T( V# K6 b) V4 W( j
#include <fcntl.h>, ~0 \- N& {) L9 C% q' a
#include <unistd.h>: C( C; ]) y3 ]) D6 {" Q1 }
#include <signal.h>+ C& ~+ J; P6 Z9 c
#include <pthread.h>       //线程
3 Q1 z0 C0 M- w* x* O- e7 W#include <stdlib.h>( ^3 ?  X! k) c, K: O4 t, s) Y
#include <pcap.h>          //捕获网口数据
+ N0 @( t) E  n& J#include <semaphore.h>     //信号
- Z7 A8 |0 g3 u9 Q+ F#include <sys/types.h>     //消息对列
1 `  {1 O3 p3 r; s5 B#include <sys/ipc.h>       //消息队列/ t! p& y4 b: P) E2 u
#include <sys/msg.h>       //消息队列! H% s9 g, K) h7 H* ~' B7 s6 T
#include <sys/select.h>; n1 N, U" m, F4 w+ @# o. V
#include <sys/syscall.h>
+ p: w1 E) V! W4 A$ E( |#include <sys/stat.h>% z: I, V# S# h9 D
#include <sys/mman.h>* ?9 E% a: M5 w) q7 K
#define msleep(x) usleep(1000*x)! p" |) L- E, y; j
4 R: ]5 e! j" E; t4 s  l
int main()
3 g+ N+ n' O* q7 M3 B{ ( a, I- f$ k# ]* I; Z  p
    //MCBSP,ARM与AMBE2000交互设备  W0 v/ K' m" `( E( Q% c
int fd;9 s1 M" _+ Q# r5 P  g% k
unsigned short data_write = 0x5555;8 f, r1 e1 K3 P- G: u* e& c1 R8 z
unsigned short data_read = 0x00;' t2 N6 @8 K( @  D
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
) }0 {% g, ^( t //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
9 i9 r7 h) l7 J3 S2 X   
% `; n+ x* z2 D0 |/ k  if(fd < 0)1 ~. c: R- Q$ F7 b& N
  {
$ t9 B5 B) {' [: U. @     perror("open failed\n");
- u2 [# A: ^' s5 x, s     return -1;
6 E/ |% ?$ {3 k5 r+ R  }  x: w1 {3 a9 @7 L7 e: |7 y
  
9 U9 N- t( R7 Z+ Y  while(1)- M- d, r7 e' P( K: }: \7 n, n
  {9 O5 h* U0 ?; o5 V; X7 `
   
/ K% s+ y, \8 Y4 Z+ x! k5 l% C/ j1 l   //AMBE2000每次读写是24个字为一帧% a# Y% j& N: Z+ j; g
   //写数据时将数据在底层存储起来,等到中断的时候再发送
# z  X3 d$ a# F7 q. t   //AMBE2000输入数据是以0x13EC开头的! ]7 `0 S; _9 i; N8 P/ I
   write(fd,&data_write,sizeof(unsigned short));; o. E" i6 y) C
   : L$ l( f2 j3 Y
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  : N9 t; y9 G) D+ G% C! s0 M$ C* o' U
   read(fd,&data_read,sizeof(unsigned short));8 n& v4 O$ N4 @3 g1 P# q
   . K6 U  B2 ^8 f, f3 j1 `& c( g3 e, a. p" b
   if(data_read == 0x13Ec)
% t% u: k* N4 O, b( A' `   {+ e4 `" m* x; u4 e* |1 R
   
+ H8 K4 j( K0 c2 ^: [/ p1 I2 o6 o    printf("data_read = %x\n",data_read);
, W$ P% E/ p8 v2 o5 T3 y$ N: F   }. Q5 S. I5 s# T5 [
   5 K) E: v9 z6 v9 {2 B
   msleep(10);
3 N- W) ?7 m: d, S  $ k+ b* {: q" X/ P7 k: |' |* v
  /*9 S! W, e  D! d& u& u0 T
   ioctl(fd,1);   
; K$ \) h: q* k' w. k* m sleep(1);5 G; r5 w3 W8 p% c& {+ C( V6 Q# C
ioctl(fd,0);! K* e& L) `/ H- g8 k, u  f
sleep(1);
9 m; l" }& M. e# [ */
: B. A% {7 k; a! h' N& h& P0 T  }   + J7 x2 c8 [- S& ^0 O8 j
return 0;
$ U! u8 b" _* O& S$ o) [" p4 z& a& O
. W0 l# B$ \4 x: [! r}" t. n; D: H8 _9 E! C$ E- ?# y
- b$ B* {8 z2 ^
多谢各位指教,谢谢! 急
, d2 j$ m) Y3 `7 [
; N% d1 F: M, C* p! u' g$ k/ v' d5 B$ E- _) y: q, I

" Q, ^7 b$ f4 _5 d* F
& v* F3 P! s- [! M! [3 N% E
8 v3 e, W# G9 y  [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 17:18 , Processed in 0.051973 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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