McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: ) A3 A! E7 ?: R+ C3 H6 C% K; }- ~
/*1 i8 g6 [# p- V
* Copyright (C) 2009 Texas Instruments Inc0 E7 q: |% A, o
*
/ g( k! H/ P* ~) l/ C * This program is free software; you can redistribute it and/or modify+ P/ L, ^  l& Z) h/ D% K
* it under the terms of the GNU General Public License as published by$ N% m+ o6 {5 J! S- `
* the Free Software Foundation; either version 2 of the License, or
% Z! f) D8 [6 L/ v$ V4 q * (at your option)any later version.( b2 y2 g, t5 V  a
*
8 F5 X) o2 {/ M% I * This program is distributed in the hope that it will be useful,
. e) ?! Y1 {0 E+ c; k * but WITHOUT ANY WARRANTY; without even the implied warranty of
, {) G2 q2 U% V; v: n* A * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7 H+ H" U8 C; M& q7 c * GNU General Public License for more details.1 H/ k( i2 f, t4 {) ~, Z
*
: I7 m7 K. k3 x) u; f0 ?3 G/ g * You should have received a copy of the GNU General Public License
! w2 j0 X- x# f, v, H  T" b * along with this program; if not, write to the Free Software
7 B& [' Q1 ~) q8 l * Foundati; K. N% B5 E$ D3 Z  T
*/4 T, \8 W4 I' ^" q
#include <linux/module.h>
1 v1 B6 R: u" d/ K% Q#include <linux/init.h>
, Y4 L9 v0 p" V7 E5 |) y* n& [#include <linux/errno.h>
0 O& l3 U, x7 f* x; n* H#include <linux/types.h>0 A. V  e. a- `/ H1 L
#include <linux/interrupt.h>
$ A1 }. L3 [# c% L, M6 [- d3 ^# l- n3 G#include <linux/io.h>* E8 z2 p: Y. M8 \- ]' G
#include <linux/sysctl.h>5 K/ F& \+ E* i- R* y8 h% \& s
#include <linux/mm.h>; C2 T2 D$ f$ d  Z3 m
#include <linux/delay.h>
- e+ o; C- H/ A6 l#include<linux/kernel.h>
" B! U) V  a" O7 x+ ?) s, K#include<linux/fs.h>
/ |' C5 @+ i4 `/ H) L" O#include<linux/ioctl.h>
6 I8 R! S2 A) Q% K  h#include<linux/cdev.h>" j" n/ Q1 @) d
#include<linux/kdev_t.h>& O( q3 {" V3 h
#include<linux/gpio.h>
, v9 U& H, Z0 D4 X3 @& l#include <mach/hardware.h>
; r  X# ?6 U4 E, c7 h  D#include <mach/irqs.h>- o8 z2 j) Q8 U, |

: x# F) t' M, Y#include <asm/mach-types.h>$ `2 B' ?/ }/ `( x
#include <asm/mach/arch.h>' |" ]8 o: D2 D$ @3 x
#include <mach/da8xx.h># G. }% D8 Z4 h1 E
#define  SYSCFG_BASE   0x01c14000
! `6 P$ W0 k. n# _#define  PINMUX1_OFFSET   0x124 # _4 W& j6 n$ B* E7 J7 N
#define  PINMUX18_OFFSET  0x168 # x5 c! a4 m) g! Z
#define  PINMUX19_OFFSET  0x16c& u0 B8 Q  ~3 u" h8 A  \2 a
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
$ q* L* `% p5 p) T6 p#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR1 h1 w" b. z  z
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
3 \$ P8 U, h# p/ A$ q" t) K% y" N#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
" T5 g& u+ q  j$ e4 H: R#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
# h1 u& ^" v5 }  U8 o                            . a0 i0 N! L1 `. R; _
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
! a# g/ Y4 k7 q- R$ S4 D; |#define DRR_ADDR      0x01D11000  //MCBSP1_DRR! Q* v3 u, e' P  @: Q
//PSC
6 N5 {3 J0 A+ Q9 S7 n( G, F+ }$ E#define  PTCMD_ADDR   0x01E27120  ( ~! \. |$ }; `: l: [* ]: A6 U
#define  MDCTL15_ADDR 0x01E27A3C
, r6 B, n/ y; I. a#define  PDCTL1_ADDR  0x01E27304
) i7 k! p8 P' ]9 M, _' I//GPIO8 direction
, y/ @7 s5 J" Z+ X) }6 D#define GPIO8_DIRECT  0x01E260B0* N" G! F  W5 ~7 n
#define GPIO8_OUT     0x01E260B4
* M- X* Y! G8 ^#define GPIO8_IN     0x01E260C0
3 L: k& [. R) H" q# x" s" i% Q9 d- D3 z; s5 ^/ o
//#define MCBSP1_RINT    99              - H6 S# @  S" j' b1 n
//#define MCBSP1_XINT    100  6 L* Y* s3 [6 o; _0 Z
static int MCBSP_MAJOR=239;. K* k* t; m7 T
static int MCBSP_MINOR=0;: t' a" c) \3 ~$ e: b
static int count =1;. r: G: m4 g% G

0 @7 T% d( I* J' u#define MCBSP_NAME  "MCBSP-device"1 u+ @5 T) o$ D
+ @7 L. z" {5 D% [) r
static struct cdev *mcbsp_cdev;
4 X- z& F$ ~  k- Gstatic struct class *mcbsp_class;
& L. ~* T& z' U: u4 kstatic dev_t mcbsp_dev;
( f8 @+ b7 F# j+ E6 p2 d& v& k  I6 Tunsigned int DRR_data;
2 W8 `) E8 s* |3 gunsigned int DXR_data;" i' K' K! W8 H7 H0 f* O
static int mcbsp_open(struct inode *inode,struct file *file)
' d: N8 a! ]: v1 z5 I  [+ c" d0 U{8 V( g8 A" J8 i
   ' E- n: N) }/ b
   //interrupt enable,initialized/ G' r. }0 o- Y( u! U
   unsigned int temp;
9 \6 K: `7 F3 N; a0 W   //SLEEP_EN(GPIO8[10])---0
! G( G2 h8 Z2 C+ ^9 r, M   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
" ?2 R- X) q- W! G, [   temp=temp&(~0x00000400);
1 u! K8 K- _- s/ U- N; g$ I$ [  {) c6 k   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]# C: @9 n0 ^- V( j# N
  //RESETn(GPIO8[8])----0----1
& i: Z" ^3 f; G2 E1 k   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));- h! K( i+ p% {5 ~7 S" X' Y  K( V2 u
   temp=temp&(~0x00000100);
$ Y" y$ Q8 n1 h. X! f1 a% ^   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
9 B+ B2 r+ n9 g. g) O- Z   udelay(100);- V/ A+ Q/ [5 r4 ?9 z3 d/ }( V/ J
   temp=temp| 0x00000100;
- P6 b6 A- t; V$ d6 P0 `1 y   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
7 `* G) h: s5 {3 A7 v6 i   udelay(100);' l  O; H4 y4 t$ W! s
   printk("open success!\n");
' W- [+ u, n- L% B; a2 _5 S   return 0;( [4 G, T8 Q  ^$ U: p4 @* K
}  w+ @. ~- i- w. ^: Z5 y
% v+ F# C  R, `8 I4 |% m
static int mcbsp_release(struct inode *inode,struct file *file)
( x# |4 q3 p9 H{
1 C* i0 Q8 ~" n5 d: _0 z, ~   printk("release success!\n");0 i8 d; W' Y( G! y" D3 x  u, P
   return 0;6 k" x# O7 F  Z# \
}0 _: e' k" h9 U& E
% [" G0 A1 d! R/ m* G, I$ g! J
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)  P9 ]/ ^+ h' R
{' ~4 j$ e/ x# w* v3 h
    copy_from_user(&DXR_data,buf,len);9 z6 Q5 Y" S9 F
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       % J1 j0 C6 ^2 k9 b
    return 0;, F# D3 a, H! e3 S; y6 f3 H

2 y* e% v8 u% o+ I) D" H}
7 T$ _' ?( F5 f! O/ n
. W; a6 }9 e+ X: rstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
4 `; i# q. ^; M9 P5 e{ , `! G" u+ i) S+ o% H% s
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));" ^' F# n* |- K! U0 z
   copy_to_user(buf,&DRR_data,len); 8 U, C) d5 ?1 \9 Z
   return 0;7 ^6 ]: C: B9 l2 C+ v
}
# E: r  @! W: o' m( S
! v7 Z* j& ^9 u
# U) _+ k" F# z8 L% c& ?4 E- [0 Estatic struct  file_operations mcbsp_fops=# l: x- J' F# P) g4 {1 v- [
{
& ~  I; W" g& f8 _2 O- T   .owner=THIS_MODULE,+ R+ y7 @# T* u! G8 i/ i3 Z6 G
   .open=mcbsp_open,
/ s- o1 g- d# J9 t   .release=mcbsp_release,0 h& f, d6 l5 f/ l
   .write=mcbsp_write," N+ m8 ]0 w" X3 j* Q
   .read=mcbsp_read,$ |8 j& i* W- ^; @0 ^
};, n6 e% C4 I8 B! R6 \5 \) M" ?$ j
static int __init MCBSP_init(void)
; n) {* {- N; {0 b4 y8 i{2 t* P/ @+ }) y& t1 c
   int ret;( S$ H: Z0 T- m& G# U0 S# R
   unsigned  int   PINMUX1_REG_old;
  ]1 |4 Q+ b" t5 h; l/ b/ U   unsigned  int   PINMUX18_REG_old;
0 b) ]9 z' i/ G0 ~   unsigned  int   PINMUX19_REG_old;
; g7 |7 v3 y5 `   unsigned  int   temp;  
+ C: g; p" P8 k' n3 s' S   if(MCBSP_MAJOR)1 s% p5 i* m$ t/ d( b
   {
3 ?5 P! A4 V- s8 ^, o      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
1 {/ H, W6 ]( X/ {( Y      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);8 c$ X  D0 B2 J3 y* x( Q! N4 e
   }7 V3 N, f5 `' N
   else' }9 ^5 j# h6 D8 a" @5 x3 h! a' t
   {
) z! @, p# X% o1 Q      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
0 v7 Q! R( ?/ F& z/ O: r  W/ G6 o      MCBSP_MAJOR=MAJOR(mcbsp_dev);+ k. q) j. y5 e# P
   }
1 u0 J! z' q1 m6 l   
9 ^. \1 h  [. d8 T$ P   if(ret<0)
5 L1 J; X+ l2 O5 S$ u* \: W' G$ u/ m1 ^   {
7 _2 m9 J2 y  F4 @& \      printk(KERN_ERR "register chrdev fail!");
( U/ G& m( c6 Y! M, y      return -1;2 w4 p6 d) k0 ], V* z3 O8 l$ T
   }& @$ r4 z5 {. G/ A' h# _7 D5 }
   ; Q3 A8 p- K; K* T7 w' E% q
   mcbsp_cdev=cdev_alloc();0 m: l* e# P) d7 `
   
% p' H, {! ]" U6 z3 S5 p   if(mcbsp_cdev!=NULL)7 |9 m' G1 w8 t# ^* C
   {: B% L) O# r$ k8 U
      cdev_init(mcbsp_cdev,&mcbsp_fops);/ l* T- @/ q' g
      mcbsp_cdev->ops=&mcbsp_fops;2 f9 y5 r2 [& W( }
      mcbsp_cdev->owner=THIS_MODULE;
1 t+ I2 v2 d5 ]( s- q/ V0 b" m% i" }      7 S+ Y# d. g4 X, M
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
5 F& D6 `  x& [9 {! K# J" g' P          printk(KERN_ERR "register cdev fail!");
7 v% O  T' L8 t% p( h      else
3 V2 x- g; _- I! o2 O9 [! A          printk(KERN_ERR "register success!\n");
+ {  ^3 c9 Y6 V   }
6 d/ @# k2 d6 R' [& [/ X0 b   else* [; b$ ?1 [7 B! P
   {
% G1 o9 K- g( {+ U. x, F4 d      printk(KERN_ERR "register cdev err!");
5 ~; ^0 Y# {. y# q& T" Q' N; U      return -1;1 P! I$ N% P! m* k+ l8 x
   }
+ Q4 ^8 @$ p4 O2 P; |   : r" k5 Q# }% i6 l9 E
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);: X2 ?0 S- D8 [* I
   if(IS_ERR(mcbsp_class))
/ N9 v' w8 I7 I+ N( ~* ~: Q   {$ z) R, A8 I* s! F+ p  T
      printk(KERN_ERR "register class err!");. S" e% t7 T2 ~6 j1 ~
   return -1;8 j) \4 M8 V/ J# g
   }
+ @" }5 a" f; B* u   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);$ b& h2 ?9 a" _4 p, r
6 y. f* S$ |, ?8 F) y
   //PSC
+ ]4 {1 I3 s! L) l% s   //add Enable MCBSP3 r* f/ {: ?4 z5 @; |
   //test: _, j8 D; t9 p- w6 A# ?5 F  ?
   temp = 0x80000003;; o0 r$ `4 K6 W" b
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));5 S4 S1 m$ p* s
   temp = 0x00000003;
  Y: ^1 @, W& O0 E; `; a# o0 h   writel(temp, IO_ADDRESS(PTCMD_ADDR));
5 t6 Y* v' G# O) E2 ?
  u4 n2 t* O9 B+ g( J   temp = 0x001FF201;+ L2 u+ ~0 i, i% s4 M: z5 ]
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
9 ?) h8 r8 T3 x& v* y# y% z   
! d( L2 U- q0 U5 C' I   //PINMUX  
: U0 y' P( N( o! y, Y, }+ I4 [5 H   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,  H8 }7 ^, d0 F
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  : _  J) Y9 ?% D
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
, S( Q1 s% u8 L7 q6 a3 i5 l4 }   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
% K7 k& X9 Y" r7 u8 I   
1 J6 q# [" {* _' k4 a: d   //SLEEP_EN,EPR,L138_SHK1,L138_RC% e, d+ s+ y5 \0 `0 k
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  9 f5 Q' ?/ `# K
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
, m4 \+ m* T, G' `9 O# U   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
) ]3 s% @- a9 H
+ ?  V/ u! B- }+ R3 u; S   //RESETn,L138_SHK2
9 u2 _0 s7 ~  ~$ b- m   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ' X- O2 W1 {' j/ |0 S2 L
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
0 O  n  O' M1 h8 h7 X- k5 v   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
8 x! x- ^: F8 |) s* e- e
' _0 R$ @/ ]) z0 _2 S2 g! ]
8 B" j8 X& r8 X; y7 v  //SPCR Register. d/ w* v, U1 u# O; V! Z3 v
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
. R) N5 Q0 s& M4 J: ]$ H  temp = 0x03000000;//(DLB=0)
" Z0 p% A/ B( ^. a // temp = 0x03008000;//(DLB=1)8 Q, ]! V" r2 K+ D$ Z
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset; s- O- c+ T' }: N
  temp = readl(IO_ADDRESS(SPCR_ADDR));% \  z5 j" O1 Z8 w1 n
  printk("temp=%x\n",temp);* c( c5 y' L! X
, z, z" Q6 b/ ^1 ]& y2 M
   //PCR Register0 o/ C$ J+ o+ c: m. ^0 W# d
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
3 |; ]" K2 k6 @9 s- ]4 K+ d  // temp = 0x00000F0F;% ^5 w. q3 i) {9 _+ @" W: @
  temp = 0x00000B0F;
, X7 K8 U  n/ N  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized % L: c: g/ ?8 d9 @+ |6 H
  temp = readl(IO_ADDRESS(PCR_ADDR));: E; Z3 v3 Z. s( J
  printk("temp=%x\n",temp);  3 e) W8 ]: e! u4 X+ k
   //SRGR Register! Y2 U: r3 y: c& o( g
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11$ a# u" o1 ]; P+ P- l* k+ I
//temp = 0x301F000B;
) T: w, w2 c5 C, [2 _  ?   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
/ R" C) g+ j$ b. t3 [/ g  temp = readl(IO_ADDRESS(SRGR_ADDR));
8 y+ Y8 g5 m* P% O  printk("temp=%x\n",temp);
/ h/ `5 S: p! E- `5 Q6 o   //RCR: p- q: Z0 N' t& Y3 G
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,) E4 `4 a+ t8 N) s5 ~4 z6 E5 u
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
, A$ u% j- o; V- @   temp = 0x00440040;5 a+ [' ^9 V  Q+ l8 ^9 `4 B8 F
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   4 k1 f5 n9 w6 u  m
   temp = readl(IO_ADDRESS(RCR_ADDR));
' f. t0 B( v9 \   printk("temp=%x\n",temp);: `# h, U5 @, n) _8 W* R
   //XCR
3 P+ L* n5 Y6 y! v1 n" e  W& V% Z( a   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
5 ]4 v8 `/ e9 `! U) D+ K* d( J9 h   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-07 h" [* A2 R7 H; f3 }0 e
   temp = 0x00440040;5 G( ?  D5 K8 F% O* r. h' c9 r* U
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
6 b( S+ W6 `' q   temp = readl(IO_ADDRESS(XCR_ADDR));
1 b1 P3 z+ X4 I* @+ V$ L4 v   printk("temp=%x\n",temp);. `; k4 C, x! B0 F* v! F
  udelay(100);
. D- \9 V/ g" w7 W  //SPCR Register
2 B( q2 T; l& C  d8 v( {  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
2 h7 A9 a( ^! ~$ N/ `" \. ]  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
0 P5 m1 G8 D- g9 t# F+ J2 Q  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled# e4 K" U* h4 Z  u: q5 u# f" l( n
  temp = readl(IO_ADDRESS(SPCR_ADDR));$ |+ S" A$ _; H( J
  printk("temp=%x\n",temp);* w% P0 j8 J! M* V- T  }% D
  udelay(100);2 d2 C! J0 s7 P# v$ d

8 P6 q! u/ i0 C- I, [  //set GPIO direction1 |+ K% m& i# |8 ~: k' V
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));8 _# u5 v7 G1 B- q
   temp = temp | 0x00000100;//EPR----input
4 u9 B3 C( B2 R" J   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
* x" x1 I- ]; `: t  C) U   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
6 L( C; H, a" z  U 1 v1 }  ^) x) i/ e% m
   return 0;$ w( p# ?3 L& u% U; \7 T$ j) I
}
  [: ?! D" x$ `" m# Ystatic void __exit MCBSP_exit(void)
, R0 u6 V4 ?- a. {# `& e{
, A9 F' y& Z9 u7 M/ v; k   printk("mcbsp chrdev exit!\n");
  _# C' C" S1 N9 B* u   cdev_del(mcbsp_cdev);
: G& t; k, E, n0 v/ C4 D   unregister_chrdev_region(mcbsp_dev,count);
& b( v- \9 F! f& j$ \0 h4 _   device_destroy(mcbsp_class,mcbsp_dev);9 v* ^' R' w& K8 O: `' k
   class_destroy(mcbsp_class);! |! M; A1 a, \' M
}
# I) i5 H2 z: K+ omodule_init(MCBSP_init);
# W9 O. _" z( q1 H2 Q4 l  wmodule_exit(MCBSP_exit);6 K& B' z9 l& }" k  @3 V& E( Q
# y6 H  @7 X+ P: S! L6 s
MODULE_LICENSE("GPL");
5 l+ e; S  K* b" f  v. p- r
* e. a1 Y- e. [我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。" J7 z. f2 J6 Q
我的应用层的测试程序如下& ~" v) v- |* I* Z
#include <stdio.h>+ a2 r6 Z0 B% c" \7 k& E6 J; L( o
#include <string.h>
0 Z; U5 `, H  M) ^#include <fcntl.h>& D1 ]8 c5 o. X5 {, d: g4 p' }
#include <unistd.h>3 R) ~# i2 F5 V8 b- |9 o9 @
#include <signal.h>& ~$ B  ]# @3 `
#include <pthread.h>       //线程
1 j2 p. o' ]9 k+ c6 q. Q5 X#include <stdlib.h>5 ^* \6 d( \7 I7 Z8 ~
#include <pcap.h>          //捕获网口数据
: E+ F( V# z  B, y2 J#include <semaphore.h>     //信号4 o2 |5 Z! g/ p7 P5 a
#include <sys/types.h>     //消息对列  Z1 B9 U% V; h- n
#include <sys/ipc.h>       //消息队列; [1 W2 O2 h) B5 q) |
#include <sys/msg.h>       //消息队列4 d+ s% b- C/ h4 H* ~6 O
#include <sys/select.h>8 L: `8 |3 f  [' H" A4 T( g! K
#include <sys/syscall.h>( E; m5 J( R( }! n0 K
#include <sys/stat.h>& x4 s1 {& m" U6 }6 o% X( @
#include <sys/mman.h>* r* ]# E. W! B( M, |
#define msleep(x) usleep(1000*x)
5 _: l' X; ^6 C. S8 y* p
2 u* S& c2 g' {, V7 U$ E+ m3 V0 \int main()- v' D) A2 i& M8 h
{
+ {: s8 l# T  V3 p. U    //MCBSP,ARM与AMBE2000交互设备  a/ Y. }- c2 h
int fd;
9 U! x: `' E/ g9 ~8 w  T/ \ unsigned short data_write = 0x5555;4 n. R; {8 m4 [
unsigned short data_read = 0x00;: ]; o+ Y( H4 x/ _9 ]3 p* n% E
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
+ Q* [: @% x2 i( |( V //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
+ `( S. K4 g6 n7 c+ \0 `   
3 ?4 X4 Q+ Y" T6 @& M  x/ i5 |+ ]  if(fd < 0)
7 J- o# b% k2 [  Q  {
0 A2 V" R1 ?! |; C     perror("open failed\n");$ h, a3 N/ R5 Y9 `- i
     return -1;
7 z# |6 I# m3 [) f0 C  }
# }3 q4 ]% ?& A$ Z" W- {( L! h9 m  
- e& I8 Q/ [. D) q& _7 h! [- k  while(1)# e7 Z# Z* m. Z* e
  {
/ m4 Y& q* ^( X6 c2 W) {9 ]" D" v  {   ! K# @1 ?4 f# S9 V$ {9 ?4 ]1 P
   //AMBE2000每次读写是24个字为一帧
: d/ z$ F3 `- ?5 D! N; y  ]# E5 g- k   //写数据时将数据在底层存储起来,等到中断的时候再发送" s1 ?! O, H; [# O0 N
   //AMBE2000输入数据是以0x13EC开头的1 }7 p( G  L) }% c7 o$ o9 m- Q' ], Q, }
   write(fd,&data_write,sizeof(unsigned short));
2 _. w  L% e8 v) z: W. A   
6 j5 E$ D3 X3 C: i0 W! y* y2 a' z* |6 j0 i   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  # m3 j: B0 A* W" K6 `
   read(fd,&data_read,sizeof(unsigned short));
* W! [  ~3 b0 [. @   
# F8 O" o  ^0 Z1 k2 e, a   if(data_read == 0x13Ec)
! h; b5 ?* s$ O& u! y8 X9 Z   {  q, w$ D$ K; A3 a% E
   
/ Z8 o5 v6 Z9 _8 p4 I6 o$ l    printf("data_read = %x\n",data_read);
, S) U1 A/ f3 X9 i! s   }% v# j& U4 r! r  [+ ~
   
. K: t  d! _8 {" B% p8 u. o   msleep(10);: u" t: _4 k/ w/ g
  5 @; b/ k: e4 w# Y( a7 T: S4 }
  /*" ?! ^3 o$ s' i
   ioctl(fd,1);   . Z0 I5 i' r0 e' _7 S3 _5 l: W
sleep(1);7 a7 D3 x5 v2 u9 J+ A6 L/ x  l
ioctl(fd,0);1 w5 `  `1 Q% G. q- u
sleep(1);, K+ l" A% b' N/ B# z: ?2 ?/ Z
*/ & W- T% n& G' C% A4 [, j
  }   ; M4 V1 @( f  R
return 0;
, |  C& Z# s; A% Q; h& u' O! V# W
2 Y/ M3 M  U* J# G) b' T" |; l, P}
1 i. p) m# w  l( J' ]2 _$ ?
9 u) F5 j" z# M$ n+ z) d  o) @多谢各位指教,谢谢! 急
9 @8 {7 l, H: ]/ @+ e
. s3 L/ _  C* c" y( _8 T7 s6 T! A/ C' w% q

( D" _/ d4 C/ e. ?' p3 G1 D4 k/ q. E+ d7 N/ K9 ^
* i, q6 ^+ ^3 n  S1 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 20:02 , Processed in 0.045247 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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