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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: # _; E! p2 q, U& ^7 V9 Y
/*
( m/ o* `1 r( i6 P) D- D * Copyright (C) 2009 Texas Instruments Inc$ i+ `6 A  ]* X: h
*
1 _; f5 f4 ^; Q * This program is free software; you can redistribute it and/or modify9 X& B4 Y2 i! m( z
* it under the terms of the GNU General Public License as published by
( ^6 D# V7 l# h+ @% J7 b * the Free Software Foundation; either version 2 of the License, or
' d! T% \" o! J  P: ]8 a * (at your option)any later version." `4 n& K& S; S: \+ s
*/ D" D9 Q% A8 S- @4 w
* This program is distributed in the hope that it will be useful,
' }6 G0 l4 `, R1 y; e * but WITHOUT ANY WARRANTY; without even the implied warranty of
$ \) h* T6 D3 U" R- [ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7 ~6 d( g: R* ^6 G# A * GNU General Public License for more details.
  K3 @. s0 E+ }2 A6 R *
6 F' L5 U+ M% _% Z# D* | * You should have received a copy of the GNU General Public License8 L7 u# x% C* U: B1 f: q% @
* along with this program; if not, write to the Free Software
1 }9 d" ]; r: E$ i * Foundati3 W/ b! ?) F6 S( Z% u. {7 |
*/* j, x/ C+ O# w: t/ x4 }5 m2 C
#include <linux/module.h>
. N! s8 D' W7 a6 \  b3 ~' J, |#include <linux/init.h>
  k8 F/ P8 g" s$ I4 e# R1 X#include <linux/errno.h>
, r( y% V/ u" a3 o#include <linux/types.h>
  C- X  o% q2 [% n% V4 ^3 F#include <linux/interrupt.h># ~& S+ e9 \; V
#include <linux/io.h>, F' a$ E# ?4 |9 q+ ~" T. N
#include <linux/sysctl.h>' u' L4 \1 V  @) w* R
#include <linux/mm.h>; z; M4 f) ?$ X! E
#include <linux/delay.h>
# [+ b$ [8 c: s; s) w#include<linux/kernel.h>
& C' R0 H3 D( x2 f" J#include<linux/fs.h>
+ U* Y6 c0 |' J. \#include<linux/ioctl.h>7 t1 v% G( W- u
#include<linux/cdev.h>
4 h' \$ [& L) q" Y0 F#include<linux/kdev_t.h>$ _2 K3 ]2 L2 E0 O6 F5 A
#include<linux/gpio.h>
" A$ ~3 W, M0 K( ]$ N#include <mach/hardware.h># d) y# c: O5 w6 b# m0 ^- i+ A- f
#include <mach/irqs.h>' @! ~# j$ P# y0 `
+ C6 |6 F7 S+ T2 g7 D
#include <asm/mach-types.h>6 D" L4 C( \; s$ i9 f
#include <asm/mach/arch.h>
6 Y- D4 Y) t& }4 p7 L( a#include <mach/da8xx.h>" J* S+ v3 [1 p# ]* Y3 d
#define  SYSCFG_BASE   0x01c140003 q3 u3 C1 h; ?$ y, T
#define  PINMUX1_OFFSET   0x124
/ M$ H! y5 Z& j, I4 _; g#define  PINMUX18_OFFSET  0x168 + x: Z- |1 P% s# Q" D
#define  PINMUX19_OFFSET  0x16c+ R7 g1 _& b3 V
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
$ e; R  u  C! Z#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR4 A4 P) Q. J9 U1 R5 j! P8 M2 Z% B
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR6 g, @3 U. I8 m% u7 L: E
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
" n+ Q' {3 q% W" H2 x#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
: |( ~6 Y2 |$ X3 |' c4 J                            # g* {& [) q4 I$ J4 u+ f, p
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR4 A' ~: |; N% B" A
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR/ u: b/ E; u& t! n2 [
//PSC" F9 D! P- [4 ?9 R& R9 ^% t
#define  PTCMD_ADDR   0x01E27120  
' w8 N3 D  X8 W#define  MDCTL15_ADDR 0x01E27A3C. |+ @0 ^1 D, E7 {* X* O3 W
#define  PDCTL1_ADDR  0x01E27304
/ e/ i  P) @- c/ P: g//GPIO8 direction5 X2 {6 q8 s5 k6 v
#define GPIO8_DIRECT  0x01E260B0
! f: m! Y( E% u#define GPIO8_OUT     0x01E260B4* a  S+ t0 G! A/ ^& [
#define GPIO8_IN     0x01E260C0
# h/ i" c# K/ [  u( N& q# e: D9 e' Q3 E: |- }% e1 R
//#define MCBSP1_RINT    99              
7 l3 j# H  V* C2 |//#define MCBSP1_XINT    100  
4 {" W' @. `# z1 Zstatic int MCBSP_MAJOR=239;* v: H3 u. L' M0 T1 ?& S( z* E% G
static int MCBSP_MINOR=0;
6 t/ t4 O1 }8 W9 o& `: [' Nstatic int count =1;
; \+ X4 T/ Z1 e# P* f& t/ ]8 j6 z) v$ H; t7 u4 r2 r
#define MCBSP_NAME  "MCBSP-device"
- A9 c+ Z# h2 U1 H% O% z1 w$ \+ X/ ?0 g/ }
static struct cdev *mcbsp_cdev;; ~7 W, G6 K9 [
static struct class *mcbsp_class;
3 o; m4 M9 U; b/ a8 jstatic dev_t mcbsp_dev;
& a$ k5 Z: L& A% Z6 n0 J2 P. a' Y3 sunsigned int DRR_data;$ D+ t' e7 V& Y/ b& z$ v
unsigned int DXR_data;
2 W0 {# [7 ?- i( jstatic int mcbsp_open(struct inode *inode,struct file *file)* T+ ~3 ]4 }) c2 W, _
{1 ?. r/ y& o4 C
   4 B% L( ]' ?2 y" A7 v6 V
   //interrupt enable,initialized7 N  n3 o& s* s
   unsigned int temp;
3 P$ T  z1 B/ l4 H% t6 z# o6 \   //SLEEP_EN(GPIO8[10])---0
$ Y, g9 E2 Q# f8 ~   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 D9 E: F, e- c' `" p" u
   temp=temp&(~0x00000400);: A9 e2 f7 {# n, v* A' Q  A" y
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
7 N. ]+ Q; k/ R* M, k% S- u$ K# Z  //RESETn(GPIO8[8])----0----19 g1 L0 a7 V: O5 @( N
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
8 D: d1 Q- L' D! T) A   temp=temp&(~0x00000100);; y& a* ]0 I7 n1 x* w
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---02 _, q% v# M" |- z' B$ ]
   udelay(100);% s% C/ i4 O' a7 s$ l
   temp=temp| 0x00000100;
- ~# _( w3 B4 c7 o   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
- X% f# S" O( |   udelay(100);  B2 _, W' m! F# c9 {
   printk("open success!\n");% X/ E; f6 J) P6 u4 L
   return 0;
0 F  M  Z( H- [  X0 x- x' P4 B}
) i+ J" Y6 ]% d
4 ]2 ]% d3 C7 g1 }! ]3 O& R# f# hstatic int mcbsp_release(struct inode *inode,struct file *file)' v/ ~4 _7 l7 E! T5 u8 C* z
{
2 t6 J8 F! l; C: \' t" b   printk("release success!\n");
9 B  X$ e+ ?4 ~+ V) R6 |" u0 o   return 0;7 |& u0 F3 R7 |5 ~1 r
}
7 E" E0 Z' e6 F/ F5 O/ ~# q: E
9 @5 Y7 C; w- \# astatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
2 n% b4 A0 f3 j- q& k{
. O5 t: t  Q1 ~    copy_from_user(&DXR_data,buf,len);
7 ^& X4 h. f- U% _$ m    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
: g1 S8 V  S  l& Z/ ~3 w" E    return 0;
+ G) X0 f* y3 I   c2 H7 w+ n' @, I6 t0 `
}
" N1 s) Y( \8 ~. c1 J& i* R( ]4 g
( b" e) A( G" j  Sstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)' x! v7 `0 t! O3 ?) B$ y
{
; W. U" I4 E7 @   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));4 K' g. p  w! B( w7 @
   copy_to_user(buf,&DRR_data,len);
  S. x& f: r4 h' M6 e8 J   return 0;
: }) I- m1 b' R1 t  q4 P4 q}
0 K, X# C3 j* d& E+ g  o/ [1 |. _- R6 }3 r* a- W3 K& E; r2 a

' `+ Q8 r  |' \7 Nstatic struct  file_operations mcbsp_fops=9 a1 C3 s/ \0 Q
{5 f9 p$ H+ `' ]6 W
   .owner=THIS_MODULE,
& t* h% k+ j5 M+ U7 m4 U1 ]: V, ~   .open=mcbsp_open,
2 ~. e+ h! s. d5 a   .release=mcbsp_release,
* l7 M4 I9 i' `+ u; r3 c$ }6 J   .write=mcbsp_write,* `6 t# l5 U4 r& N% ~
   .read=mcbsp_read,( {$ A; P* W  w# L2 B
};
4 a" L0 k$ ]8 N2 sstatic int __init MCBSP_init(void)
' e/ ^+ Q; \; i- g! C" O* [9 w{6 G9 z; k6 H# U
   int ret;
! H% O; L5 M, x9 \1 b   unsigned  int   PINMUX1_REG_old;
3 _) Z& u# M, s) |4 S  P   unsigned  int   PINMUX18_REG_old;: p  ^  X* C1 w( s2 S6 T1 Y, T
   unsigned  int   PINMUX19_REG_old;
8 S  l/ Z8 \2 [* T; a/ `* v   unsigned  int   temp;  
/ L0 L8 ~1 B! I( T5 p$ y& D. i  c   if(MCBSP_MAJOR)" Z) v0 }0 u3 d3 h6 g
   {2 ~( D% z( M% `+ h1 J8 _. F
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
7 {8 I9 S7 W5 U3 [& r      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
1 h3 O% B' @- H2 b* V   }
5 X; S8 P# Z; X" n) ~& J   else% ?6 J0 h* d6 t
   {
+ D$ c% S1 ^8 L7 y5 K      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);+ c2 X$ I& \. v$ [# @
      MCBSP_MAJOR=MAJOR(mcbsp_dev);; L( h# l! Y! j3 q1 M- I. K( S
   }4 s3 u* A+ B5 a  o
   
- b7 r8 z6 `3 N: x. A8 j4 H; ~9 `, \   if(ret<0)/ H8 p; T# }$ a" A8 {3 ^
   {
5 f; B. M  y+ y' G" n+ O      printk(KERN_ERR "register chrdev fail!");
2 @: f6 ?3 n# L6 ]4 G# Y, b" [      return -1;: v1 D; c" h3 Q! G4 T
   }! h% m" ]5 _4 r' ?* @
   
3 X0 `6 }- A3 L* [7 S& v5 W   mcbsp_cdev=cdev_alloc();! M2 N. q5 N" H9 C( t4 v- z
   ' ^4 k& z0 U, `# w* _$ C) P
   if(mcbsp_cdev!=NULL)
  j. f  R& x' h6 P( M- h" ~   {6 L! H$ _+ E, ^7 K: k: k' v
      cdev_init(mcbsp_cdev,&mcbsp_fops);
" }2 t/ E. ^( [5 x% c0 Z      mcbsp_cdev->ops=&mcbsp_fops;
7 }; o6 l9 I% m% n  O      mcbsp_cdev->owner=THIS_MODULE;3 b* c- D7 C! i. q( ]
      : d2 Q. w6 R# n# L0 C; R' }
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))$ s+ g! M' j; T3 O+ Y  i( b5 c
          printk(KERN_ERR "register cdev fail!");
8 D+ p3 V, P" k      else' ]* t) y% u) q/ _
          printk(KERN_ERR "register success!\n");
2 g. P# J& W# u& f1 G) {$ e   }+ H$ W. ?% `4 ~& Z2 ]
   else
9 c; E1 e! d) Q   {& S% j- V# W9 }9 L, n7 h
      printk(KERN_ERR "register cdev err!");; }) v# o' T8 o( s
      return -1;. |" ~4 n* S) l. ^
   }1 h) |( ^* |2 J  R1 l
   5 n7 |3 E+ C# U
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);  K: S( r$ j  d) h
   if(IS_ERR(mcbsp_class))
% Z4 h5 Z8 e& I& V$ h! ]   {
* F; z( ~: a6 z( M$ N! v* F4 Y+ y2 P      printk(KERN_ERR "register class err!");
+ W$ z( Z& K! S' a9 T: q   return -1;9 }3 u+ d. [- L" X1 b
   }5 ?3 u7 R; P$ h( I3 D7 d5 K! j3 d
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
/ |/ R; @' G! I6 q8 n, s
7 D8 a* l. `3 Q& Q/ u3 q& ~9 i# N   //PSC
( ?& K& P, U, h0 G2 p9 J% Q3 `, J& m   //add Enable MCBSP
1 x' e  o9 C7 d. W1 Y, \   //test$ f) H3 f; {8 j
   temp = 0x80000003;
6 D5 B/ f/ D9 c/ ?4 E   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
) k0 F- D* \: t/ W   temp = 0x00000003;# x- B# R: l$ R! r7 c
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
% H) I- M' D! z) q! E8 \ 6 T# l; h+ k) v3 |: G5 e
   temp = 0x001FF201;
, `# I' W6 s! a  z# C   writel(temp, IO_ADDRESS(PDCTL1_ADDR));, ^' V3 W' A1 U  K& w
   ' v  Y' y$ q) F* b
   //PINMUX  
' R, t( V( Y, @+ E( h2 n   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,$ D1 U0 V6 ?- ~. o
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
) j& Q( S* N$ F( \+ S) l   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
& Q5 i+ {; m2 G- h7 @' |   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
2 D! m% c' B8 E' Q* m   
% ?/ x. w" ]- ?, ?6 ~   //SLEEP_EN,EPR,L138_SHK1,L138_RC0 U0 l! I+ ]9 |
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
  I% }. ^1 U2 }  A0 I   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   3 \1 ^  E( U: u  r; `
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
- N9 c3 {5 H! }* L) c3 t/ T4 H
/ l; G  i  Z# @* I3 B   //RESETn,L138_SHK2
3 t. Y$ U$ K+ L9 r7 f   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
0 q; R( [3 s5 M# ^   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
: W, R5 x) j0 @5 L3 p   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
/ b# e. q: ?$ ^; h2 Z8 c " ~* M  F4 E: u# J9 s2 e4 L! ]% v( g
, S: E$ X2 F$ Q" b7 ~7 l
  //SPCR Register
7 P& N+ K9 K; Y6 d  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset* C; |: ?. w: X# L5 S" f
  temp = 0x03000000;//(DLB=0)0 h5 }* f7 C7 n
// temp = 0x03008000;//(DLB=1)# W, g# x% p3 S5 e6 a2 |
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset, P# X0 H; `" V* _7 w5 ?
  temp = readl(IO_ADDRESS(SPCR_ADDR));2 G% R% V4 N! b0 y+ S, M
  printk("temp=%x\n",temp);% q: B( c2 G* _9 X) ~7 Y/ q
' G5 Q% \8 O% ^& ]
   //PCR Register0 z: A4 I- R. Z3 q
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
- S" e+ k; u3 F8 ~$ S  // temp = 0x00000F0F;
* l* a, I+ T) x- S! y  temp = 0x00000B0F;. l! [8 j! H/ }: ^" n3 u
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
0 z- I7 L( {' `# u$ F3 d  temp = readl(IO_ADDRESS(PCR_ADDR));6 U# J- h" G  i- f
  printk("temp=%x\n",temp);  
" g- I& W. D/ T7 y- t   //SRGR Register! j$ z* U! E* F1 v
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
$ ]# }5 |* H. ~! X3 X1 l* P3 ? //temp = 0x301F000B;4 {; F1 v( x( I  ^/ O
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
; u4 ?0 n% m, i  temp = readl(IO_ADDRESS(SRGR_ADDR));
$ e' U: y, b* `( o  printk("temp=%x\n",temp);" o( h5 m+ K5 j# |& r! L4 f7 ^
   //RCR! t0 P% m, N7 Z, E
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,; z& c6 P, M* l9 P9 m' j
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-00 o6 t4 Q% c; \0 f, e# g& M( }
   temp = 0x00440040;
# _2 ]7 r+ }7 G   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
* r. y' J: L- W2 l! Y   temp = readl(IO_ADDRESS(RCR_ADDR));5 u8 p- L* {3 i. N+ w5 H
   printk("temp=%x\n",temp);. l, m) ^, Q/ i( ^, K& h
   //XCR9 B( R, B/ J, M
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1$ x3 t9 ]7 v/ z. v% b. d) l
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0! Y* H" X. K" ?, g" D: N- S9 Z
   temp = 0x00440040;! z+ k: H4 q7 C' |: D7 G/ U! K1 U
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   4 z% ?$ P2 N  h1 ?- {3 d( e
   temp = readl(IO_ADDRESS(XCR_ADDR));! O2 K6 Z) M2 D+ v* U
   printk("temp=%x\n",temp);
* h* F0 I7 @6 @) }: d  udelay(100);4 v" R# q+ U7 N1 B, ^9 V/ m% d& }/ ]
  //SPCR Register
) [4 z+ }. n5 w  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1% [  h7 C+ {. y
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
, p; ~9 N, m: i8 ?+ `/ Y9 _$ ^3 Z! g" e  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
- P- t0 ~( x$ y  temp = readl(IO_ADDRESS(SPCR_ADDR));
4 n/ e4 Q! A) r1 w6 i  printk("temp=%x\n",temp);! ?3 J  X; t9 t- P/ s; h
  udelay(100);
* {* A# S3 v1 h+ x  ^  y: N* D. ]% |( v  d' u- |
  //set GPIO direction( j7 R- p$ h) b4 f0 m: ]' r9 Y
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
8 D/ d9 k+ f# e( d& j   temp = temp | 0x00000100;//EPR----input
" t9 i( ~7 z) K1 h9 L   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output, P  i6 s2 m' p( g! p% j7 x7 P1 v) P% V
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); # |& d) X$ Y) a  W- R: U% p7 {
5 G  R) w1 O8 u* o4 i' q
   return 0;
1 J6 v3 x- ]. v3 J6 [- d* G% J3 e}' ]1 [( ]; V9 k
static void __exit MCBSP_exit(void); O6 g# J0 |+ f9 b0 e$ v
{' l; x3 a* D9 D* W
   printk("mcbsp chrdev exit!\n");
; r& I9 x, g7 @" b   cdev_del(mcbsp_cdev);; B$ q' `. b. I2 b; T! [3 E' \
   unregister_chrdev_region(mcbsp_dev,count);* X. b2 n, e- D+ c8 a8 J
   device_destroy(mcbsp_class,mcbsp_dev);$ {2 h3 x( Q6 I" K
   class_destroy(mcbsp_class);
6 M& L  H5 y- Y3 G}7 w4 n! h1 k- ?1 p& w0 r
module_init(MCBSP_init);4 ^3 S+ G+ u/ s; o
module_exit(MCBSP_exit);
5 K4 P* q1 u( g# _6 X: Y
" g! T# R) v7 r  w/ G7 ?MODULE_LICENSE("GPL");
; W% T+ Y& L% N) L' S0 C& s" `
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。0 f; _* Q( ^. |+ F4 X7 E6 R
我的应用层的测试程序如下
1 d' y5 \' U0 W9 E#include <stdio.h>/ x) M: x, E, W" K# q1 T
#include <string.h>
8 H* w- m4 F! I2 p8 m9 w1 ^, P#include <fcntl.h>3 k; \; v2 J% I& J3 ]
#include <unistd.h>9 u& @, b, s) r3 D7 a0 u. a, {# ?$ d
#include <signal.h>' d/ J2 }7 C- y) y5 U
#include <pthread.h>       //线程
% K5 t. q. t1 D& d3 x1 O#include <stdlib.h>1 k1 j/ J. p* L/ u) @4 W
#include <pcap.h>          //捕获网口数据
2 c1 l$ a( K! \; v; ~3 F! J#include <semaphore.h>     //信号
/ w# O- M, m* A2 H4 K#include <sys/types.h>     //消息对列5 z/ F( z/ \/ U% c5 v) Q3 w1 ^
#include <sys/ipc.h>       //消息队列
% p' @7 K4 U( N2 A8 H$ V, U#include <sys/msg.h>       //消息队列
  s5 C* Q4 A4 \$ ~" m2 S#include <sys/select.h>* y8 u1 T. I( ]1 _6 p5 O
#include <sys/syscall.h>% ?8 j8 G  A" ^0 B$ M
#include <sys/stat.h>
) m5 H) v4 ?- u7 V1 T/ J#include <sys/mman.h>) g+ k. S/ f0 O7 b
#define msleep(x) usleep(1000*x)  G" B3 e; A2 ~0 Z7 C% C, A& @8 u

5 M7 c5 C0 \; g/ i& Fint main()
) \0 S7 j! I& @4 @! }{
0 r& y# n" X# j) b- Q8 T+ Z5 t    //MCBSP,ARM与AMBE2000交互设备
6 J; A$ g0 A9 D  a int fd;9 c- ~% e* L; h7 ?
unsigned short data_write = 0x5555;
! F) c9 R8 V8 B unsigned short data_read = 0x00;
  `& K" p& |3 V* A  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);0 p, o! j4 B, Q- _' Q
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);, W. B' M+ }/ g3 _8 }: G
   
) P" i, }* _5 d  if(fd < 0)
1 ]- e( Z' G. F$ I3 E  {
3 p% n+ h/ E$ q2 w     perror("open failed\n");6 b4 i+ P% t" f0 x
     return -1;4 ^+ S1 M! S; r/ T8 f
  }# u1 T! b% V) G2 [1 G
  
4 A1 E0 h& d4 b; q$ G4 f6 Z4 k, y' m! P  while(1)1 ^6 g0 |  ]) f  y" W9 a# Z
  {5 h- D  ~  F" V  u- `: L
     p+ a$ U2 F( ?1 h& v0 E
   //AMBE2000每次读写是24个字为一帧- S7 e1 F' ?; x0 n
   //写数据时将数据在底层存储起来,等到中断的时候再发送$ ~6 u6 `: J. r
   //AMBE2000输入数据是以0x13EC开头的5 d$ \! x, T4 b1 p7 `% {! M; ^
   write(fd,&data_write,sizeof(unsigned short));( x- Q& d' `) I! k+ |* l. l& `
   
; a- O- b1 R8 E   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  7 h( G6 ^8 k2 h
   read(fd,&data_read,sizeof(unsigned short));. ]' j; \( w1 ^2 }) F
   . Y1 z8 W# e+ h; d$ D
   if(data_read == 0x13Ec)- w& g  Z6 t5 ]9 u, T
   {& [4 h3 ^; a1 h  \9 f& G7 I) O! ^8 J' C
   4 Q, s) q- `  h; b. n
    printf("data_read = %x\n",data_read);
2 v  V9 \' g) H  z& t2 G   }
2 C& `+ Y0 U8 m8 E" }4 n   7 l" F- L6 X3 U4 p
   msleep(10);
4 T$ V4 u7 h! V* K# I  
! k$ W5 G% r" N- {+ I  /*2 z9 v4 x( u: j+ S  y
   ioctl(fd,1);   * f& z# M  Z4 P
sleep(1);
/ W2 ~( w# H3 m, t( {7 z# B8 z ioctl(fd,0);  w9 F  f+ [& I& F  V
sleep(1);; k4 E4 J8 i8 v7 |2 Q% R' E( o
*/ 2 t' D( @& e6 B. e# P4 z! U* `
  }   / {! D& `, U# ~$ L9 t5 A' l2 ]
return 0;
8 z* p9 ?( e- ]; A
7 |" p; z" l! I2 V; `}
1 t9 q! i6 h) K! K- E9 e. R% m2 J; g, P. p8 k3 C- W
多谢各位指教,谢谢! 急, c  x) I6 R. M2 s" p

( ^& u3 J6 Y5 T0 E, \. q& r  F" d0 K: m  e& k
0 I8 H0 r% A: a" S& H( G1 j5 y

6 Q: x. A0 d: |4 [2 z: ]$ S( m: }7 q$ @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 15:05 , Processed in 0.049078 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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