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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
: ]! h4 d7 r' g( ~3 ~4 d9 g/*
! _! D+ g2 @4 U8 G, }- i8 h% u * Copyright (C) 2009 Texas Instruments Inc( L. S3 d! h5 b* ^; \  T' A# r
*( [' x3 }+ I  J$ X6 P: L, q$ ~/ ^
* This program is free software; you can redistribute it and/or modify
! z$ S7 R; C! w( }% y * it under the terms of the GNU General Public License as published by
7 K2 b/ I% @* |/ L( _( G * the Free Software Foundation; either version 2 of the License, or
( r5 b. A" p- E9 a0 ^7 O * (at your option)any later version.: a% @2 Z0 ?. h- N. q" I
*
, H7 _$ f# t( h& ] * This program is distributed in the hope that it will be useful,
, e3 b, E5 U* W5 J! f * but WITHOUT ANY WARRANTY; without even the implied warranty of* a  W" e7 `( S& a1 V9 u
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! r" A+ L3 e: _8 T- ^0 n
* GNU General Public License for more details.
  ~* o$ K! e- \" g* [# g *
+ W6 O8 d, J3 k+ p7 j- R * You should have received a copy of the GNU General Public License
# W7 I1 k3 R9 f5 ^- \ * along with this program; if not, write to the Free Software
! T  h1 I3 A( ]/ G* R * Foundati. B% h% h% d) P* I
*/9 i$ |) O& V& |; n. n
#include <linux/module.h>
$ l' h  X: P  p3 R#include <linux/init.h>
$ |$ i4 \) |4 [5 M; ^#include <linux/errno.h>/ u5 |! ?. Q% Y  b
#include <linux/types.h>5 {* d3 L2 b6 M8 E2 d: G
#include <linux/interrupt.h>
6 m' c' e$ @+ t) F#include <linux/io.h>
1 ?1 y8 e  B! t#include <linux/sysctl.h>
& R0 {- Y, a4 p+ w* m4 |#include <linux/mm.h>
' X* C; R* g  _+ O+ [9 q#include <linux/delay.h>
2 H9 u3 u6 r* o! s#include<linux/kernel.h>+ A# l/ o4 P+ D3 u/ k
#include<linux/fs.h>) ~' t' |4 [7 m% v# C  U
#include<linux/ioctl.h>
! C5 q! d  ?0 f0 [#include<linux/cdev.h>
. v/ F5 z5 @; X' b% `2 s#include<linux/kdev_t.h>4 c. C8 `! {' |. s% |
#include<linux/gpio.h>* M- F5 c- _0 K
#include <mach/hardware.h>1 p3 z( d) B8 T3 q5 |, n, L) h2 v
#include <mach/irqs.h>/ |% H2 a, m) r7 i+ r
( w( E. |8 c1 r6 v$ n# k7 s8 q
#include <asm/mach-types.h>: `& D" L( D3 Q) p( g
#include <asm/mach/arch.h># w. @: t- Q6 F! i
#include <mach/da8xx.h>2 o( ~8 m. e: F5 L5 n# K% L7 D
#define  SYSCFG_BASE   0x01c14000
3 N1 P( u* o* d* S#define  PINMUX1_OFFSET   0x124 - t& G; w2 W( V" `8 N6 e
#define  PINMUX18_OFFSET  0x168 ' ^+ N4 n, g  ]5 W0 ^! W
#define  PINMUX19_OFFSET  0x16c
- F# _5 W4 C8 |3 P% e1 V8 ?, N#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
4 o* D( ]& y5 [#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR: n8 ~, O* [1 _7 z4 w3 n; K- e
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR7 W( [9 }+ d$ F0 s
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
! y* _5 g! @; S8 ^2 k#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
2 Z, h" f5 i; W. R                            / z5 y* s" q9 A& B  d" {0 {. b$ U
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
# L+ |% }: h  t5 {- x" ?# W#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
0 `; W! i1 i. S6 K: {( s//PSC( x- j$ E; N3 N, U, C$ [$ D
#define  PTCMD_ADDR   0x01E27120  , [+ Q% i) P& g- l0 O( C& |
#define  MDCTL15_ADDR 0x01E27A3C9 {  `5 ]+ c/ I3 n
#define  PDCTL1_ADDR  0x01E27304
6 V& r8 B  M  @4 v' R/ r: [//GPIO8 direction- f+ n( ~5 y/ l
#define GPIO8_DIRECT  0x01E260B00 J% ?# ]7 m( F: M: Z" R
#define GPIO8_OUT     0x01E260B4! v+ y3 A  [# Z6 l- d
#define GPIO8_IN     0x01E260C0
0 |. K1 e8 ]3 ?* @6 U! e" o8 P$ |* F
//#define MCBSP1_RINT    99              
" c& n" B% o, Z$ U! r( G) c//#define MCBSP1_XINT    100  
- m! x  d0 O4 @2 Bstatic int MCBSP_MAJOR=239;
# C" a3 J4 Z. m: E. G# Fstatic int MCBSP_MINOR=0;$ \$ Q  ?1 ?8 N  J( e6 ?  g- }
static int count =1;
2 e. @$ f  ?- f) \5 V3 J/ v0 h! K
#define MCBSP_NAME  "MCBSP-device"5 x* ?3 D; I) }) v' @& i

, t2 g2 E' O4 p/ ystatic struct cdev *mcbsp_cdev;( S! l5 M: Y# z4 o  t$ [
static struct class *mcbsp_class;& u6 i' m' \% a, L
static dev_t mcbsp_dev;. c* `& f& }$ [
unsigned int DRR_data;6 g8 r0 \  g) ~$ x; _0 m
unsigned int DXR_data;8 u' c' P/ n3 H5 L- g. N7 y
static int mcbsp_open(struct inode *inode,struct file *file)
5 k+ p& y' u! Y; W  `{
3 W' {  r7 p' _! U   ( }; A3 p5 o/ F1 p/ C' h8 N
   //interrupt enable,initialized' @# L5 E3 ?- F) X* o
   unsigned int temp;
& Q; Z, g6 U0 }) d$ _( n   //SLEEP_EN(GPIO8[10])---0
- J  T* b" ~  E- [1 O   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));- c, F% F1 w* S5 f; L; V6 U
   temp=temp&(~0x00000400);
( U8 o' H6 l6 D- t0 ?. b   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
; @" y8 k5 n" l: e  //RESETn(GPIO8[8])----0----10 H+ [( c1 N: O
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));( {( L* t$ r3 c! i* Z+ |
   temp=temp&(~0x00000100);
3 y# a- x; \& W( K# K. s' ]   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
$ }( `9 z7 p; i0 P8 I+ b. ^5 T" L   udelay(100);# }1 r# U- w4 S. h' r
   temp=temp| 0x00000100;) a" n, M' o# k! l# R  D
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1+ |/ H; _- m/ n
   udelay(100);; I+ V/ U4 T$ Y2 g
   printk("open success!\n");
6 c/ F/ Z% _- Q: G   return 0;" N0 I2 H+ \7 c  y- x' m
}
# f+ X$ r! P: l3 o
: E& ?. E: t  U! ]" Q4 N; kstatic int mcbsp_release(struct inode *inode,struct file *file). _, S; F1 u- t; b% o- C  [
{9 {6 a$ ~2 e& M4 I/ A
   printk("release success!\n");
1 i2 q- p' S" |0 A1 k$ W- b   return 0;
0 e3 R/ {- _# q6 z}8 n5 W9 F) H" r3 Q/ g3 e) B/ T

3 h/ c5 i& ~3 J0 H7 z% i$ Ustatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
0 L) B) j! O; L/ S8 d) V( v+ x{
* j" X6 G3 N" t! A1 \( r3 U; s    copy_from_user(&DXR_data,buf,len);
3 O4 I- D  `: _3 {# B    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
7 E8 Q1 K: c5 U    return 0;
: P+ m. O, E1 q' T( I 2 z4 p3 L+ m2 Y! t
}: u$ e5 S0 J& p

, X8 o0 i/ @0 B7 Ustatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
* V0 c" r& l4 s0 E  o* j; g{
) L3 ?- S9 p* c& g+ A( z' F   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));% p5 X/ D/ G$ B8 ^7 y# K/ @
   copy_to_user(buf,&DRR_data,len);
7 h5 h$ \" g+ _- G   return 0;
: ]  ]! D" R% U1 f" R3 N% _: P}
8 y7 V  A+ H& c0 Y  a0 D2 x, C
9 ?) T  p0 \: N8 I# K3 G. T5 R5 y3 Z9 {1 B9 c# l- ^
static struct  file_operations mcbsp_fops=
1 |% f9 c9 l$ O% b0 I  W, ^! m( p{
& C' I& R% z2 o   .owner=THIS_MODULE,
: e1 Z5 r4 P" Q1 S: A, M   .open=mcbsp_open,
! [# X  R8 q/ \( ?3 ~   .release=mcbsp_release,9 m0 m; y, {4 J; b$ v, s
   .write=mcbsp_write,8 K4 o4 ]3 Y! H( g3 S8 q6 S
   .read=mcbsp_read,
( o& ?- G7 J! K1 v; |9 K};, L+ O$ Z. y0 {, n
static int __init MCBSP_init(void)
6 ]9 A0 V! i7 V. Q{; ~: s1 w$ H" d6 j; Q
   int ret;2 U4 k/ J* }: u6 y- K8 W! k
   unsigned  int   PINMUX1_REG_old;
: K4 O0 W) J$ f: M1 N( m+ V   unsigned  int   PINMUX18_REG_old;1 S1 I# V2 Q+ g
   unsigned  int   PINMUX19_REG_old;; r3 p4 x7 C) j7 t: p
   unsigned  int   temp;  
) H( z8 S4 m5 V! d' t   if(MCBSP_MAJOR)
5 e' J( ], r% N9 [   {9 @% Y  r- g& U
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);6 X. o3 G- Q, n
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);. D9 q& P/ m& k1 H' J
   }
9 Y8 [+ Q- B, G, x   else4 q+ ~: _) Y" e
   {
& J- K( g" m' Z+ D! i# N$ |9 s4 ^      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
1 y! t0 N) B3 A# ?8 E# R      MCBSP_MAJOR=MAJOR(mcbsp_dev);4 p  j! ~* A$ p7 P2 n, [, ^
   }* j  ~8 `- S, k$ c- I
   5 Y% m# s! Q2 J) @! c4 V
   if(ret<0)
2 O8 s% }+ @! c0 i+ z( c   {- [2 h1 ]. @- j  a; I* t( `
      printk(KERN_ERR "register chrdev fail!");
" b8 L/ v; L; s' Q# x3 e      return -1;
& W" c5 d" Q: c( s   }
0 o0 ?% b& |4 Z$ ]   
. Y3 f! ^% T0 e2 |   mcbsp_cdev=cdev_alloc();3 u8 Z% l* ~) T$ L
   
0 ?6 R$ K5 @2 a0 f" v6 L% l, y/ x, @   if(mcbsp_cdev!=NULL)% r* O6 w: ]8 h- J8 W- p
   {
4 W  U& a* F, X1 [0 i6 [4 {  q      cdev_init(mcbsp_cdev,&mcbsp_fops);
' ~4 [+ r# m' `( l6 N      mcbsp_cdev->ops=&mcbsp_fops;% G! _; V$ h  j! d- V9 m9 ~
      mcbsp_cdev->owner=THIS_MODULE;
1 x1 A5 E2 m( y6 q* Y% J, W8 o      
' K, D, H+ A1 ^/ ~      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
0 {* u4 ~( l1 L% v( _% C          printk(KERN_ERR "register cdev fail!");( h: H& s5 {5 m3 [5 v$ w) d: w
      else, X& ^9 I& d  k* z
          printk(KERN_ERR "register success!\n");
" F3 H. E8 s$ Z2 [+ ]! d0 A* `   }  y, T! M; E; J' J  S
   else9 o% T( u, F- `4 W! L
   {
# a( l6 x) h, ^/ w8 V/ b      printk(KERN_ERR "register cdev err!");9 k% `7 w& A4 @
      return -1;9 i- r8 c4 k$ ^: G7 ~9 J, I3 t
   }2 Z1 b) c" B5 a- L; M: M1 k, ]& |
   
) y9 p2 d# N# G3 e& N  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);  k$ ~  P; w5 `( Q
   if(IS_ERR(mcbsp_class))
& @6 _8 s" [$ f* b9 B   {
6 i# X$ A5 @( X! h+ J8 W      printk(KERN_ERR "register class err!");
& I3 {- `5 B. G6 m   return -1;
+ q2 Z1 Y" e# Z, F   }
- n3 M/ B6 P9 |& P. O+ O   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);& Z8 S0 K1 c% r

$ |4 t" m9 b" r4 E   //PSC! e7 x- F4 ]8 Y+ M% S
   //add Enable MCBSP( I; k) h! r" W
   //test/ S1 q: u, _9 Y( i1 H
   temp = 0x80000003;$ b# P" C' \+ i! z' G
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
7 J) |+ z4 ^9 T8 z0 v   temp = 0x00000003;  Y9 B8 I6 K" x) G* s" ?
   writel(temp, IO_ADDRESS(PTCMD_ADDR));0 h5 h+ y4 l4 |6 f& y
' c( C2 ^  U0 n+ O6 C' C# u
   temp = 0x001FF201;" h* j  o% B1 ^/ B1 Z
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
( g# O- _; m; [4 S   
  H- Y6 N5 L9 v: q   //PINMUX  3 e1 ?1 ~# O- [- u" W% k
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
. T1 m3 j, f) x% g1 M   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
$ X$ S! v" G, N# L+ A   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
/ J5 m" E  j  t5 r% o   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);: Y  \# s/ s6 u4 y9 {+ D$ D6 n( N
   & y1 i1 Q$ E8 g. V* e
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
% u5 v, q1 F+ X1 \   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
9 g( Z0 f' X3 L5 a! O# l- ]0 B   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   $ ~$ G. O- x8 G  E
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);& f: g' R7 J9 |, d: F- [  e, I. V
6 x6 B6 J: t- ]& o
   //RESETn,L138_SHK2, @2 Q/ D" o% n  [  q( F
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
2 c! D6 _9 l( J% D8 R  d- W   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ) D$ B4 [. Y* l: j; h2 F7 G
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
2 k8 I  _1 Z5 u5 F
, ]) s0 p% L( f3 W4 a ) d$ H) B  ^0 c& t7 g
  //SPCR Register& H* Y, f/ z& s/ z: X# l% |7 E
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset* P0 L$ Z! D# y" w$ e
  temp = 0x03000000;//(DLB=0)
( I0 I% E# }+ W7 c' a% y // temp = 0x03008000;//(DLB=1)
8 @5 Z7 V  {0 k" X/ ]& b/ L& m  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
3 r1 r4 i" f, U. p& n, s  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 q, p+ V: ^; o1 s) X: y& p  printk("temp=%x\n",temp);
0 |+ ?  K% r0 t/ M9 O
8 `/ E# a1 k. V5 p+ u   //PCR Register  I* {+ t$ S4 G0 L
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
: [% l, d& ]( r& f* m% Q  // temp = 0x00000F0F;
- L- Z7 v' l" m: D, P2 Z" [4 i: R  temp = 0x00000B0F;
8 ?/ L: M7 E2 m8 W% c  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
' a& i8 d% c& V* [7 }4 Y0 T' b  temp = readl(IO_ADDRESS(PCR_ADDR));9 z' e+ J( G" L- r) H0 g
  printk("temp=%x\n",temp);  
# S, \7 _" K. R8 f   //SRGR Register
2 @& q# R% R6 {7 B) X9 T9 ^0 k   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
4 O% @+ C$ B' E //temp = 0x301F000B;
& ?8 C$ k$ I1 z2 `   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ' `; W( t* B* P
  temp = readl(IO_ADDRESS(SRGR_ADDR));
& c# g4 U6 J8 f- x) t  printk("temp=%x\n",temp);
( ?7 p5 }3 `+ o% V& E   //RCR
( ]5 p) I5 ^$ p( G2 ]7 g3 N" n- W   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,5 Y2 J, Y5 M5 a0 @4 ^: I( V
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
4 E) M6 P3 d0 ]& M7 t   temp = 0x00440040;, Q7 F+ P, k5 O, p6 y
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   % h  v# |- o8 G' C
   temp = readl(IO_ADDRESS(RCR_ADDR));
$ H9 S6 }% B5 }2 s$ P   printk("temp=%x\n",temp);
8 p9 P- F2 B8 U; O   //XCR
& f5 r( ?) _- L) }* q  G8 }+ C   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-16 Q! {4 _- H: Z, L) i0 k& A
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0. q, z/ W  t- S- {! Q, i; n7 z
   temp = 0x00440040;! L2 y) @; R* p: s
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   7 q4 c( E3 Q! m0 D( B
   temp = readl(IO_ADDRESS(XCR_ADDR));: Z  ]% |! T% c0 Z" O! g
   printk("temp=%x\n",temp);1 L9 \- l8 q$ j7 x9 K
  udelay(100);
* B+ h  G1 X% w" j9 d  //SPCR Register
) |& `. C) L* W" G  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-10 ]8 J6 ?  l6 _2 H1 K4 a. x
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1" [  {( p5 G2 w; L. y9 Q- N$ K; j$ V
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled  R8 u( [8 t- W6 A+ ]2 w9 g% ~
  temp = readl(IO_ADDRESS(SPCR_ADDR));
- ?/ M& d' N" D% @  printk("temp=%x\n",temp);% R+ u( i6 y  f9 J! Q/ t; b
  udelay(100);$ I/ E/ E  K- X) L

- [! A) x/ H, L0 j8 k& U  //set GPIO direction
4 u+ w- O9 V! P+ z0 F% }   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
- v8 o# x4 Y& f4 v' i   temp = temp | 0x00000100;//EPR----input
9 z3 G% S( ]: q: h3 D   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output. P- i* I: ]% m# [
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 5 d& |* g7 }$ E. c
9 m/ c5 T! U( {
   return 0;" _2 }9 ?. i. J+ m# z6 F  V
}
0 f% Y. W) q7 e0 Z4 N, N, istatic void __exit MCBSP_exit(void): p, y- z' p2 h
{
' Y4 s+ S$ @2 L% k- s, H  ?   printk("mcbsp chrdev exit!\n");
6 N6 O/ ~; @( q7 S" I% n9 D, ]   cdev_del(mcbsp_cdev);
: K- m( y1 }' B   unregister_chrdev_region(mcbsp_dev,count);2 e" y4 w1 R4 \9 R) F9 s
   device_destroy(mcbsp_class,mcbsp_dev);
! _- A- M# j9 k& t   class_destroy(mcbsp_class);
. c9 v; R: \4 i}
( `8 w# }/ i6 a/ N8 rmodule_init(MCBSP_init);
2 a7 E9 \( n1 C# h- c3 Y1 N  {4 Fmodule_exit(MCBSP_exit);" G7 s1 d( D5 \( ^6 r" i, d
4 [7 K3 s" ^+ D
MODULE_LICENSE("GPL");6 b2 D2 g3 e- P+ Q% I& {
3 T$ z- `0 \3 {' G5 p& b8 f* M  P
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。, j& ^- K% h7 x
我的应用层的测试程序如下
# t3 \' J% ]7 B  h+ N9 ^" K#include <stdio.h>1 E0 R7 V( C! _9 q" A% {
#include <string.h>* b' V( H/ d$ u" ^2 A( ]
#include <fcntl.h>0 l/ u0 K% o8 ]* r- D
#include <unistd.h>6 t( K7 M# h( b$ L" L2 B
#include <signal.h>
6 [( d6 a2 s" }& U* Z/ c; j#include <pthread.h>       //线程
/ s$ M* b8 V  E#include <stdlib.h>; W+ A4 s! N! G  b, \4 w) C7 L3 |
#include <pcap.h>          //捕获网口数据
9 `9 B7 i) ~7 C1 I3 L; v#include <semaphore.h>     //信号
2 Q0 y* I; L6 I( a8 n# c#include <sys/types.h>     //消息对列( S, y* \9 O* W/ ^# }6 P
#include <sys/ipc.h>       //消息队列
2 u2 x7 D! y( K$ r#include <sys/msg.h>       //消息队列
2 \2 j$ [% k3 U8 n#include <sys/select.h>
& _1 |1 f4 e: r( t. W#include <sys/syscall.h>
/ f$ E# e! @6 Q& Y8 f#include <sys/stat.h>
( A- f9 {* ~; y  `#include <sys/mman.h>
" ~$ _3 a; k- m& [- M% k$ ~#define msleep(x) usleep(1000*x)! i* {3 j0 _2 l5 G" Z& ?: l

# @7 G: U) f0 O' `int main()/ @$ K! _8 K% K6 F) I1 V  {
{   _+ C8 `7 d; P! r
    //MCBSP,ARM与AMBE2000交互设备
. S: n: X6 L$ {8 e5 E; s# }( q int fd;& {6 `1 m- K# c1 m- e2 H
unsigned short data_write = 0x5555;
. @4 N! Z6 ?, O7 y! @5 h; }+ L; K" G% { unsigned short data_read = 0x00;
/ H- v$ P* j' d. D. B/ |& }* v" W% P  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
7 E6 G& H8 X- l' E3 C. N //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
3 F- ~2 T/ U- S   
" p. f8 N1 e6 C. j& ^  if(fd < 0)1 u. f4 B& N( W( g$ S
  {! s; G4 A/ t  U% T; \! C* E. k4 ~
     perror("open failed\n");
* N2 w6 i$ {5 v     return -1;
8 c" g! A, Q- S7 Z  }- ~1 b5 K/ C0 }% o, ?) n7 Z! V0 k/ Z
  
6 f) ^& I6 o" K4 P5 }' b  while(1)& _" r  j( _- u2 J) b! p
  {
& v3 ?. F3 G7 ?3 C* A8 @   5 H% z- G3 q5 d
   //AMBE2000每次读写是24个字为一帧
1 E- O& r" ~3 b: W   //写数据时将数据在底层存储起来,等到中断的时候再发送
0 T& c/ A! p: W1 k! g8 L/ z6 Z   //AMBE2000输入数据是以0x13EC开头的0 N5 ?! g9 w/ E; J; b: G
   write(fd,&data_write,sizeof(unsigned short));
- F+ Y8 ~& Y/ ?. X4 \$ z   
4 q" X) d' T0 f   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
2 L6 n( N. @5 k) h! f$ A   read(fd,&data_read,sizeof(unsigned short));
* G% L; H: X) Q0 c   
# N- T+ E, ^# _1 W+ V& K   if(data_read == 0x13Ec)
' T/ Z1 ^7 N4 M. Y: ^6 c3 ^   {+ n' k4 R: ]- {, t( {3 c
   + C7 `% [% f( t# e  ^
    printf("data_read = %x\n",data_read);
, ]# x- I& `# i$ Y$ \   }+ @& ^* ]3 d( J+ |% v- [
   9 Y: F2 Y% O+ B$ m3 _
   msleep(10);; ], z# @2 S9 P
  
3 x* Q8 ^; K# |) }8 I  /*
3 i+ b; j' j9 ^   ioctl(fd,1);   % W& Y* I- L+ P) K, T* M; b4 K) c- _
sleep(1);
2 \% v. Y9 Z' w7 a# j9 | ioctl(fd,0);
- N" M! P1 Y( \& t3 k0 T! p sleep(1);- U# `% |( E. W7 ?
*/ % ^% m) N6 ?' W2 p
  }   * Z- }7 @- B! W# L8 j. c
return 0;. F3 i* W0 r2 e( Z# ~3 V* Q
% N8 }+ P+ X' u" w( {" |( k
}
4 c7 t( i$ n: E$ k9 z5 u# q6 n+ G0 I8 d( ]
多谢各位指教,谢谢! 急$ ?- v% k# [2 \. c1 h7 _
, Z+ |: N7 W+ z! E8 r( \
. K# r- n# P: {& t

9 |8 }1 f, u) ^, j( V& p$ s4 s& s6 U: @" o& ^& F! L
! G% R: c  ]6 p: w( A7 x; I9 ?$ d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 18:53 , Processed in 0.046733 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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