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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: ; y# ~' L) r: s! U& [
/*
" N6 `( d+ s" S, g1 ? * Copyright (C) 2009 Texas Instruments Inc. y2 Y" P, c7 |* \5 L9 S
*  w- s3 W% [* a$ k: _$ f3 L5 W3 ?
* This program is free software; you can redistribute it and/or modify0 }+ u9 W6 P( c( D3 m$ R1 e: |8 S) r
* it under the terms of the GNU General Public License as published by$ d4 `$ `9 L  h# w( B( c# m
* the Free Software Foundation; either version 2 of the License, or* s( U% g2 q1 d5 w9 Y$ G' Q6 V; I
* (at your option)any later version.
0 O# x& R# C# Z2 B *. Y) z& _( g" H( @9 X8 `, z
* This program is distributed in the hope that it will be useful," n; o- _5 f% J
* but WITHOUT ANY WARRANTY; without even the implied warranty of' ]! R( B0 _3 \- H7 F9 i
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* P, i  S9 Y( E& D
* GNU General Public License for more details.: U6 ^$ g; B  ]0 l# J3 _" y# P
*' B! ~, H) Z. ]1 H
* You should have received a copy of the GNU General Public License
5 t, s0 t+ c* z7 K, T6 M * along with this program; if not, write to the Free Software
- O% G% G2 |4 X * Foundati3 r3 B) H; M2 X3 S* j( O
*/' Y. C0 i' Z4 ]5 @- J3 x/ Z
#include <linux/module.h>
1 G( u- E7 s2 _3 T#include <linux/init.h>
3 a% `8 c" J% S' S#include <linux/errno.h>
. q" ~; u" Z  P8 l" s5 [#include <linux/types.h>7 s. C: Z, d( n5 j- D1 Y, N
#include <linux/interrupt.h>$ |. w( X8 [# H
#include <linux/io.h>
" r) o6 ]+ H5 [* c, k#include <linux/sysctl.h>9 f0 B1 w/ H1 Z$ w$ I8 j2 C
#include <linux/mm.h>2 W$ |- j0 ]/ x( u
#include <linux/delay.h>5 w! o" O/ L  E) y
#include<linux/kernel.h>; M1 l2 e$ z/ [# c% ?* r/ C
#include<linux/fs.h>, _5 t5 L0 z/ T7 |: g
#include<linux/ioctl.h>: w( T" T1 p  O1 p
#include<linux/cdev.h>
) ]9 ^* B9 u& b- f$ S0 m  o. e#include<linux/kdev_t.h>
+ H3 X, V7 {# Q8 s#include<linux/gpio.h>
/ f) X- H. [0 h( M  x#include <mach/hardware.h>4 l: U9 |1 v$ ~( {" C6 M7 L; e
#include <mach/irqs.h>+ y9 w  ~" X( L- o
) R$ j" l* j. a- `' A
#include <asm/mach-types.h>
) c5 I5 E: t$ |4 C' ?, k; g5 j#include <asm/mach/arch.h>
0 h+ `# o/ v7 [#include <mach/da8xx.h>/ \7 b# R- z. O% }# a8 Y# K: _2 z' j
#define  SYSCFG_BASE   0x01c14000
/ c! b- @2 @# Y' |, A" {#define  PINMUX1_OFFSET   0x124 2 q& y' ~& ]2 U& s" ~, j) }6 J/ B
#define  PINMUX18_OFFSET  0x168 * Y* M( r& {$ Y% r; G" ^
#define  PINMUX19_OFFSET  0x16c4 T7 r. G  d* ^3 M, g
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR, T( L) u& z( O% v3 A$ K
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR' C) A2 t4 l8 u1 Z, _+ i
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR1 B6 j' L4 c3 L8 ~
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR7 K. {4 f* v7 G
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
9 \) G8 ]0 j" E1 y                           
& d8 [2 Z0 ]' Y2 v! @/ d% v. b#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
$ p4 v* o4 ?( s9 k#define DRR_ADDR      0x01D11000  //MCBSP1_DRR& I, V' O8 G4 s, T7 Y4 r; g1 u
//PSC
; `- O2 J: X1 d#define  PTCMD_ADDR   0x01E27120  0 x  }5 ~" q7 [0 E' V, ~
#define  MDCTL15_ADDR 0x01E27A3C
' O+ D- s' E* T#define  PDCTL1_ADDR  0x01E27304. q* j  V! q7 T
//GPIO8 direction
8 A# S- l9 T6 f' R#define GPIO8_DIRECT  0x01E260B02 e/ i8 d: B4 h
#define GPIO8_OUT     0x01E260B4
1 {7 |" ]8 ^+ T1 q2 M#define GPIO8_IN     0x01E260C0
% Y! B/ j- G( ]3 [* c  S6 F6 C! {& ]9 _; M  T5 M
//#define MCBSP1_RINT    99              
7 R) F) Q; D# `+ O//#define MCBSP1_XINT    100  
  ~7 e& R4 I8 ]6 D- n8 y; d8 @( nstatic int MCBSP_MAJOR=239;( a' M" I" p$ p3 {3 B+ J. a8 f' b& a
static int MCBSP_MINOR=0;
# @6 ?. O: e  _$ q: l1 {3 Lstatic int count =1;
) K* u  b* @, Q" m' [$ E3 i
; m7 a" s& p8 @0 r# X2 H& f+ ^#define MCBSP_NAME  "MCBSP-device"
) g: j. U+ @# C* p6 c8 s& n1 z. z% C. C; C0 d* H6 y4 U
static struct cdev *mcbsp_cdev;, z! K9 R+ R3 h/ a
static struct class *mcbsp_class;8 ?; P) G6 F3 o
static dev_t mcbsp_dev;% d% m, [6 |/ C1 t/ y
unsigned int DRR_data;
& m! z" |  [- [9 v* X, aunsigned int DXR_data;
8 T7 S" U& B1 D' istatic int mcbsp_open(struct inode *inode,struct file *file)
: p( _$ V/ V: ^{" R0 _3 ~0 s" ]+ r! c
   
3 z8 I* h- N& i   //interrupt enable,initialized3 Q3 @$ ]- _5 D1 m3 {
   unsigned int temp;
3 M+ F9 w9 ]7 p  X) K9 F7 d   //SLEEP_EN(GPIO8[10])---08 S. b4 w$ ^- E& ~
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
6 B- C& F- U' K; c' J   temp=temp&(~0x00000400);/ n4 X, b5 _* G, ?
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
8 t5 ?9 j9 L0 e  //RESETn(GPIO8[8])----0----1
3 J' c( _) u0 d3 c( W3 _   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
6 P; g  P+ l' @0 N8 o   temp=temp&(~0x00000100);; _, ]2 G6 l: K8 a( b# l
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---08 i0 F; h  e$ {% @/ G
   udelay(100);
+ I1 J3 o4 o5 w! {; A7 ^   temp=temp| 0x00000100;
" a# Q/ ?- {5 V1 ]; h: {   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---14 T# J& k0 Z! j( Z" X# {
   udelay(100);
& Z" B" H* ^  X1 H1 o1 y   printk("open success!\n");, p9 f( s! _$ c* k" D9 Y0 v
   return 0;4 R+ D4 E7 A3 K% i
}& |4 \' [$ b0 H$ o

. t% V- R. n  _$ ?9 a+ estatic int mcbsp_release(struct inode *inode,struct file *file)
, ~5 B% m: n6 k6 \8 n{# E. Y6 ~9 A: S) a
   printk("release success!\n");
$ `) A7 |$ r* H. a+ ]  p  o   return 0;- r* T: `, {5 K3 n
}
$ y9 @7 r1 ?/ B/ J% }6 @% P8 |- v! O' ~1 T! G  v; m& [8 a" E2 `+ ~
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
( s/ y* r9 {$ Z/ v6 A{
3 d+ O# x- O% I0 m* P& y    copy_from_user(&DXR_data,buf,len);
3 `# _& ]) [  G$ D# ?' W    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
$ }9 y7 r; k% r: w    return 0;4 W/ I8 D: c/ n% |6 F" b- R4 I

+ g+ }$ h9 \6 n" u8 I}
4 {$ [& f4 j% _  Z# N7 q; O' U6 q. l8 j1 Z3 Y$ [; @7 |
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
0 S# e1 `& ~/ \+ X. H{
- f/ I% R6 j2 B# J- n4 ~! _5 Q   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
4 ^2 y( c4 X* C' G   copy_to_user(buf,&DRR_data,len);
$ x' B7 X- G! P0 c; w   return 0;
' }. c5 [8 [* L6 d& O/ P}
2 @$ T% s; C  A9 B# o: c* [  R) w9 X6 L7 c3 G
. X' u0 q: _+ D8 y1 F9 \
static struct  file_operations mcbsp_fops=
% A! u4 h3 t' \0 o1 f+ E{) i& b9 L5 G& i: j) i
   .owner=THIS_MODULE,
1 U1 P7 m6 ^  p) d   .open=mcbsp_open,
2 M- J% X, v7 W   .release=mcbsp_release,
! s, I8 s8 `: T1 W# K- x% W& K( A   .write=mcbsp_write,
2 ?: o8 B% e! X9 R1 t. d* Z   .read=mcbsp_read,
- K& }9 \; m7 X5 A8 R; A};
+ L8 m7 S5 c! Z5 X" g4 sstatic int __init MCBSP_init(void)6 r9 O% P# g6 u8 Z' @1 \1 M: ~) T
{
' r0 C3 {* g3 h  e: q* `+ B   int ret;; J4 ?1 X3 U' s0 w
   unsigned  int   PINMUX1_REG_old;9 c/ i) n2 k# |7 r( W
   unsigned  int   PINMUX18_REG_old;5 v* s: F  ~- r; d! B7 w
   unsigned  int   PINMUX19_REG_old;0 |$ K7 ?: u" n+ ^2 X4 `
   unsigned  int   temp;  
/ p" I% ?( v- t& v2 ]+ m3 D0 k9 d: r   if(MCBSP_MAJOR)5 z! T8 u, i; j2 C# S7 n
   {# H& S4 C1 }* b8 G8 Y! E* r$ Q
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);8 w* ^0 ], r% Z# w; Q, d; e
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
% S6 L* d3 J3 Q   }' k9 S. Q: |* X! N; g6 M
   else
( x5 w3 T3 N/ D( K8 c   {
& U6 n: V+ u, U  |0 n% V      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);( t# _' S3 u% s
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
  l& p6 t3 |9 b+ w5 S- F   }1 z  C5 W+ g0 R
   . z; ]% ?, Z, O! C$ S2 f0 ]
   if(ret<0)
! l! |# Q$ J* S9 t   {
# F. ]/ r  U2 {      printk(KERN_ERR "register chrdev fail!");
" k0 D+ K8 q3 H      return -1;
) ]/ Y& O# ~% ?! C   }
8 A# S; w) L$ \8 Q4 N) |   " z& o9 W  L& u- x6 k
   mcbsp_cdev=cdev_alloc();
7 O, p! B$ U4 K  n7 B   3 P8 c/ x! I; E  C( q
   if(mcbsp_cdev!=NULL)1 Y$ S5 [$ ]/ _3 x  p& m
   {
" N1 v* I' p$ c7 Y1 H5 t      cdev_init(mcbsp_cdev,&mcbsp_fops);
3 v, j7 z7 P$ `/ M/ j      mcbsp_cdev->ops=&mcbsp_fops;
  B; V9 |5 L; Z# }# A6 {      mcbsp_cdev->owner=THIS_MODULE;
( C4 L9 a: K6 N& i6 q      
' Z4 w, Q) r6 e0 {  h      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))! V% A$ U6 c0 O$ y
          printk(KERN_ERR "register cdev fail!");! F" E# C5 b5 R* f; r& }/ H1 L
      else$ X' P( M% ]: B2 s( i& U
          printk(KERN_ERR "register success!\n");
4 ?8 M3 F" u+ D8 O$ Y' ~% ~   }8 A6 j# ~0 X* Y
   else
1 P; s' y4 y9 a   {# j, N7 s9 E/ ?- I: b
      printk(KERN_ERR "register cdev err!");
0 S! {7 n1 ]( a' n* E      return -1;
4 L! T  g: d  a1 \   }
! W: l# O1 l, v   
/ A% B5 s, y7 w& c  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);: v3 G3 Y- _" _
   if(IS_ERR(mcbsp_class)). v( m, F' `6 [5 E# F) k9 j
   {
7 z8 M; L% d* ]$ `; r1 q, |      printk(KERN_ERR "register class err!");! ?+ u( ^6 z0 a6 o* d: `# L
   return -1;
9 T! K- {+ ]' O   }. C8 H% o! I  d
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
* n0 I, c# ]" a- }
! y7 A! J) C; Z' Y   //PSC
" H; q3 j2 F7 n( H) W5 V   //add Enable MCBSP
5 S% m2 i' s: ?1 m# I& l! T7 \3 d   //test
1 `/ ~7 n2 Z: G" f& S   temp = 0x80000003;
& `4 [/ q5 j' W0 u   writel(temp, IO_ADDRESS(MDCTL15_ADDR));, C4 r/ y7 u8 d% f/ g8 h
   temp = 0x00000003;* q9 A" x5 e, [, P" q
   writel(temp, IO_ADDRESS(PTCMD_ADDR));4 `! B; Q" l* N
6 b2 @# ~; _; g  U0 U6 L6 d. O) b
   temp = 0x001FF201;! d7 g3 O7 A6 O6 h9 E8 t
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));# C: y6 x) Y  T
   
9 z0 a, h7 j- B4 o  a1 d4 @   //PINMUX  
  R) S. y7 H. T) f; a4 J   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
+ i6 ^+ q+ b# n$ D4 x   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
3 I& n0 V: A  R. [8 h   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ) b" ^( i! z" j# w3 H% ]
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
* y' d' `8 S* y, f   : {8 t, \: r7 H6 e0 B- U2 T  A
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ }: L$ R  ]; F9 B% M+ o8 f, j; i! @   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
2 N* ]/ K! o* U3 G: p# t   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   & |; c; S. z# K2 Y/ A" J6 S; q
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
6 I5 l5 _# y- Q2 p) B- i9 r 8 |) p/ d, J" O* g( B
   //RESETn,L138_SHK2
; ]) {5 H3 L3 X9 j1 s! |   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  5 X) Z" W; N8 R
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   7 x3 _! g' H+ W- Q9 j9 e: i/ r0 s
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);6 e  T/ s* z* Z4 L. w" c) p1 I

7 V+ M& w  o9 j9 v, M+ q
9 E1 R" V( ^4 L/ R  //SPCR Register6 G0 w2 M- T- _
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset+ }3 f" T# Y( @2 ~; A* @) H1 |
  temp = 0x03000000;//(DLB=0)$ X- y& s) O& X3 n0 n/ j# @# i
// temp = 0x03008000;//(DLB=1)3 e1 c% [# V5 {' q
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset% A( J3 _: q2 @, w# j1 j
  temp = readl(IO_ADDRESS(SPCR_ADDR));2 L. d/ n4 M. m
  printk("temp=%x\n",temp);0 |: p, H% _6 h; {

1 |9 K* c+ _. L# p" n   //PCR Register% ?% e& X3 {% E
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0' n5 W6 q4 I, x% ~% a6 z
  // temp = 0x00000F0F;
2 E. M0 \" K0 y( c/ F  temp = 0x00000B0F;
3 C3 i' \+ ~7 m! P. A  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
1 y9 x7 v5 P  Q: q  temp = readl(IO_ADDRESS(PCR_ADDR));
* J; X' ~' s( u: K  printk("temp=%x\n",temp);  9 f. S/ ^+ V0 ^# W) L, y! B# g
   //SRGR Register
7 {! U7 q$ q8 L- D8 a: ~   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11' X' o. G9 h/ j1 e: D6 m
//temp = 0x301F000B;
1 K3 G8 j9 C; g   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
( s5 `( U' g2 {  temp = readl(IO_ADDRESS(SRGR_ADDR));
2 S* k) K! o" p. |  printk("temp=%x\n",temp);
$ N0 S! W0 z# X   //RCR
8 L' _/ R, v' v  `4 q1 o# R3 H5 e   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,& d0 N" M% p9 F+ G7 F
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
, h6 d7 T- c$ v- G3 V8 D3 j+ f$ K( P   temp = 0x00440040;, Z' @" Q0 P9 t+ j3 n7 {$ {7 o1 S
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   : [. x; G* V- r' ?" S8 Z' J0 h
   temp = readl(IO_ADDRESS(RCR_ADDR));9 R+ D4 |8 @% _$ v' J5 B0 s
   printk("temp=%x\n",temp);6 X* B( r8 N# l" x2 N, f6 K- D
   //XCR! b/ B/ e. k- p7 ^$ J: E! K3 A. {
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
" h9 q7 G( O1 _( E   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-09 d6 k( G; f& P8 v6 J4 p
   temp = 0x00440040;! b$ J$ w7 b, e' ]. S3 `3 m
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
; F7 G8 h8 D; Z# ?* @/ M. g# X" _   temp = readl(IO_ADDRESS(XCR_ADDR));8 {4 A% y6 u3 Z9 _" F0 O" Y
   printk("temp=%x\n",temp);
7 c5 m1 j. l* h  udelay(100);
2 Y! I  e6 H; V! w/ N2 d% A  O  //SPCR Register
3 t: o5 h  @7 Y% i  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
9 W8 i- L! m, x+ D! @: K  temp = 0x03C10001;   //DLB = 0 VS DLB = 10 N! @2 L3 z/ b6 X0 t6 E  ?) \$ R
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
: @8 x2 t, g& g  temp = readl(IO_ADDRESS(SPCR_ADDR));; ~6 i1 K1 q# T5 d
  printk("temp=%x\n",temp);; p0 `: M$ H; N
  udelay(100);
/ x4 b  J+ c- G, P$ E: A+ o& p$ |: b2 P  _) b8 Y4 q9 n
  //set GPIO direction$ r) q! d# Y; C2 s4 L0 h1 v
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));; H# Q5 Y" P+ Z) f6 L
   temp = temp | 0x00000100;//EPR----input" K/ V* V3 |  x& u
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
! y" Q* K/ P# i' ^/ J$ t2 T   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
4 g! C& F9 ]4 ^+ s. [( B0 g% j
& |$ a; X7 [: l2 Z( V   return 0;
' D: |, g2 ^4 m: B2 y% B% n}
  k# G/ P; k5 ^- hstatic void __exit MCBSP_exit(void)
, B, ~5 Z. y/ C. c) f7 I{
4 K1 ]4 w% d% r* t4 D& R% Z7 l- M   printk("mcbsp chrdev exit!\n");
* ~2 A) ]/ ?9 Z* A: f( ~   cdev_del(mcbsp_cdev);
7 i- Y2 R+ s# K. a; M2 I, l2 |   unregister_chrdev_region(mcbsp_dev,count);
: B, R. w4 |) x   device_destroy(mcbsp_class,mcbsp_dev);
  A  S, t; ^/ R- E   class_destroy(mcbsp_class);
0 ^# \; E7 Q) L& A% |}
( q3 F+ B: _* X0 N/ _module_init(MCBSP_init);
) T! b4 d) |: }module_exit(MCBSP_exit);" \8 j* m: v" R4 j1 r

- C& {  n1 L( G' F7 _7 v, |; y. mMODULE_LICENSE("GPL");1 `2 _( S% g) o0 X
; X- g, x: h" @
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。: k; Z" ]$ t/ s4 {( m
我的应用层的测试程序如下
8 {0 ]$ Z1 n9 H! e" c7 G, z#include <stdio.h>3 Q) E0 I& a$ z5 f" Z% ]( M3 Z
#include <string.h>' G0 f" |3 C% i" j6 V5 C3 e
#include <fcntl.h>
/ b# L* B7 H& r7 A#include <unistd.h>/ a! q3 T1 w2 B% }, k! \
#include <signal.h>
: |1 u& I, V* h) |#include <pthread.h>       //线程
2 [4 \8 F5 }9 e1 ?1 _7 T$ L#include <stdlib.h>
! Y$ a+ ?9 p  j$ M9 v#include <pcap.h>          //捕获网口数据/ S$ X; [; }4 S* x2 L; z' V+ g, e4 `
#include <semaphore.h>     //信号6 C; o# y* n3 ^# T
#include <sys/types.h>     //消息对列
0 q1 \" I% j( H#include <sys/ipc.h>       //消息队列0 U) u% G' X8 F7 G) M
#include <sys/msg.h>       //消息队列
, [* U% @* E2 C2 f/ p& y" ?) ^#include <sys/select.h>
- x% W) G1 Y2 R  @2 G#include <sys/syscall.h>* }: [' I( y4 q2 {  r$ f1 x
#include <sys/stat.h>) L$ }: X$ v. L% Z% M, \
#include <sys/mman.h>
6 @$ w3 h5 ?- E/ ~  T7 k  b9 r#define msleep(x) usleep(1000*x)
) @4 {: z% B6 _% p$ c, S" m
3 j1 R, A" n$ W% D" T* [0 d9 yint main()
, i3 f/ y& G6 d% L& k( z* i{ 9 ~/ s: T0 n" B7 ?! e% @" Q# _
    //MCBSP,ARM与AMBE2000交互设备) H+ y  l. {7 k6 w) R# l
int fd;
0 _8 |7 I7 r5 ^: ] unsigned short data_write = 0x5555;' K% J- T  A2 O! l
unsigned short data_read = 0x00;
0 S/ m' U2 U. ^  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);: a: i6 x8 }! `; B
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);# ?; c/ i( W, C% p1 q3 K
    / K" U% A, `6 b, X
  if(fd < 0)
: c0 P# x1 f6 s) S5 P% L6 Y  {
# n# N" M2 z6 d8 m     perror("open failed\n");
4 L+ R9 K$ \* c$ Y! R5 o     return -1;0 X+ K! K4 q5 t
  }
. g. F6 k6 O: C. q  $ o5 Z$ H0 q. M& B, `6 n( i3 A- n# J, ~
  while(1)
/ }. g( ?2 P2 _# q* H  {
" T& K) v  u3 o7 v! b   ; p/ e* Y# N. J$ {; }* b+ [& i
   //AMBE2000每次读写是24个字为一帧4 \9 H# C# c' p# _7 {0 E: y& E
   //写数据时将数据在底层存储起来,等到中断的时候再发送
$ m9 x% E0 g7 o   //AMBE2000输入数据是以0x13EC开头的; h2 n* z6 a" |' s5 D2 N
   write(fd,&data_write,sizeof(unsigned short));
2 P7 s9 K& p" t   
) j6 R$ j, E6 l+ S   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
2 V  R+ C1 Q! W$ _   read(fd,&data_read,sizeof(unsigned short));
$ E9 C8 d) S; Y' A. y   3 b) D% j3 |0 C( G
   if(data_read == 0x13Ec)  K, [, H9 \8 b9 x* P% j8 ^
   {7 D7 _, |2 s2 d
   
, h+ u& w5 ?2 W9 W9 p    printf("data_read = %x\n",data_read);
( t  p; q1 M/ q8 y   }/ I9 a/ f) Q# u5 N9 p
   ( z/ ]: F- o) X9 T7 [
   msleep(10);
! r* t* X" }6 y8 O4 ], E, C9 [  
/ \4 o/ P( {' p6 i  n$ W0 `  /*, P4 W, J' H1 q- G/ T/ Y/ G1 q
   ioctl(fd,1);   
7 i8 a  T9 ?6 y4 n sleep(1);" e5 W! Z$ r/ ?. n) e, v
ioctl(fd,0);) t9 S9 A- F( J  a2 n
sleep(1);4 J8 l" z' M  i2 b6 U" j
*/ ( B1 u: g9 c" ^3 h
  }   
. f' {4 p# M1 L# w! W" x1 R  m" [ return 0;6 I4 Q4 k" t. C6 I

3 t# X; U; L% \0 |# M. }% t! W2 F4 u}, x  n# G, \! R0 x7 v3 o

" T! |2 `+ n, l2 r多谢各位指教,谢谢! 急
: F  m# f; u+ w( n) Q( Y* \" P+ s: c! y  o; P8 G
  I, U& Z! J  w2 ]- I! W
& _0 X( g7 z+ x6 p# i
" c  n1 A3 ^3 t" \5 U/ w+ S; m0 s
2 {% k  v' a/ U: D0 |/ x3 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 02:45 , Processed in 0.050412 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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