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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:   b6 n- }( y! N) {
/*/ b; w5 u8 a, O
* Copyright (C) 2009 Texas Instruments Inc# s6 G2 D! x' i  [5 Q
*6 ~" k0 T1 p+ o8 ?
* This program is free software; you can redistribute it and/or modify
* T+ b' ]9 g7 B* t% I3 I2 N' g- F$ q * it under the terms of the GNU General Public License as published by! q$ c' z5 `" `* O* |
* the Free Software Foundation; either version 2 of the License, or; A$ P: e2 D3 b0 S$ E# g
* (at your option)any later version.% R7 M+ f$ m' P& _" l8 [
*
) ]6 k) j( _3 t5 v2 z * This program is distributed in the hope that it will be useful,. }3 E& R5 m# m% v6 Q
* but WITHOUT ANY WARRANTY; without even the implied warranty of
# m* [% W2 j$ G" h! \ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0 Q: B, M9 X; L( n3 ~9 u * GNU General Public License for more details.
; C8 C1 m5 ?  ]" C3 P *' z9 m( a9 s" X$ G8 i' `
* You should have received a copy of the GNU General Public License' j  c% j* n( W
* along with this program; if not, write to the Free Software
2 {# D4 f) m& M' S# O' X, ?% k$ P: _) ^ * Foundati" F4 j1 b$ D  W7 `6 H
*/' Q1 a" \7 r( M* r
#include <linux/module.h>
. Y; {7 g7 y0 z; E#include <linux/init.h>. f& x# q5 [3 Q* X5 M$ E
#include <linux/errno.h>% y+ P$ @5 a9 f/ L5 n% Y. @' y% r( b
#include <linux/types.h>
. I! z7 O9 f+ O$ q0 `3 y#include <linux/interrupt.h>; G& n3 u! o3 c% `! ^
#include <linux/io.h>3 i0 I' ]( b* H  D! K/ m
#include <linux/sysctl.h>4 e/ B% }0 m8 V$ [6 a& b1 I
#include <linux/mm.h>
1 o- {! r+ b" J% S1 `* V4 P#include <linux/delay.h>8 `5 [. C: R9 Z) j8 @
#include<linux/kernel.h>. z: o9 Z4 o& a# I6 w
#include<linux/fs.h>% T0 _' o$ c, L3 [
#include<linux/ioctl.h>$ J/ b! w" Y4 i' }2 Z- L' Y
#include<linux/cdev.h>
$ K7 J" Z7 o  Z  T" a+ Z9 i7 {#include<linux/kdev_t.h>
5 ?! t* j& |4 B; v6 U#include<linux/gpio.h>
$ J- P: ~0 N; ~6 \" B4 X+ o#include <mach/hardware.h>4 `# Y9 w; Q6 h5 G* _+ w
#include <mach/irqs.h>% O  k- {/ ^# j$ V* V
2 w* E$ K1 q% c: j3 F
#include <asm/mach-types.h>. R/ ]8 V' \% K1 m* ~( u
#include <asm/mach/arch.h>' p: t  R/ b: i, v
#include <mach/da8xx.h>
4 k* L% h9 o3 N  A$ v6 s#define  SYSCFG_BASE   0x01c14000* p3 f5 Q6 V. e+ [* j& [
#define  PINMUX1_OFFSET   0x124
1 d- Z* H6 R6 C2 {; {0 k#define  PINMUX18_OFFSET  0x168
6 |: }/ q! M( ~#define  PINMUX19_OFFSET  0x16c
2 r* x# @/ ?2 w# j6 s#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR8 k& U! i5 E4 R4 Z  \
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR! o# b% r( T# E* D  B  N) N2 p
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR+ L' _& l$ X7 z! d
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR7 _2 a  W) P" {
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
( R. _9 f' T& {% P, Z9 e' d                            & c: Z7 H; G' W
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR0 M- P3 Z  E4 `1 }/ E5 I; _  E
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
; h/ h+ E& w* {+ R//PSC
8 R& r; O* F1 C9 {0 o2 v#define  PTCMD_ADDR   0x01E27120  - t. r8 D% L% V$ N# J3 [3 R0 }: H
#define  MDCTL15_ADDR 0x01E27A3C9 r% i4 R/ o5 d4 J0 C( G
#define  PDCTL1_ADDR  0x01E273049 s) e: H' e. @0 Z  R
//GPIO8 direction
6 f0 F8 D( a$ T9 m* z* o8 g#define GPIO8_DIRECT  0x01E260B02 |+ O/ P, E. S4 Z- I  F
#define GPIO8_OUT     0x01E260B4
+ w+ k# K- y2 Y* C#define GPIO8_IN     0x01E260C0
) L/ p; A, _1 S: ]" @5 e6 |6 g! K4 G3 C5 \. K9 e2 q! I
//#define MCBSP1_RINT    99              
! B- n8 o$ K5 G/ s//#define MCBSP1_XINT    100  & G6 h4 z9 n& O/ \5 C( Z
static int MCBSP_MAJOR=239;
( H4 c2 t( J3 |8 m  ?0 w4 `static int MCBSP_MINOR=0;
4 b/ X2 i2 ~3 u8 z4 y- Lstatic int count =1;! |1 R: T6 @7 P
; q6 @7 p5 F; {+ F9 z* g; T
#define MCBSP_NAME  "MCBSP-device"- o( P, r* l- L

3 J( F& @0 G' k( _+ F' P) c1 o" Vstatic struct cdev *mcbsp_cdev;
) F- O6 t  h; l& i  H7 cstatic struct class *mcbsp_class;
. f, Q2 I6 I# G, N9 Ostatic dev_t mcbsp_dev;8 ^. M) q& y4 m
unsigned int DRR_data;2 T2 L. `* u) [7 I5 q! d1 A
unsigned int DXR_data;
) z5 I7 Z! n+ N/ istatic int mcbsp_open(struct inode *inode,struct file *file)
: p6 y( E+ E2 P/ ]0 p' p! D{# N/ y9 ]( u5 c5 R3 l0 x  y" o
   
: N  y# b7 i5 O6 C, x9 M: V   //interrupt enable,initialized
- l6 S! m! Y" b# O   unsigned int temp;7 e* l, C- I9 U: S5 }" v, l( [1 a
   //SLEEP_EN(GPIO8[10])---0  }: a" {' s& @
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
& h' O! g  T# {- h9 y   temp=temp&(~0x00000400);. ^; v* X5 h( r1 j% b
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
# G, r& U3 A6 q8 u. s0 G; C+ K7 C  //RESETn(GPIO8[8])----0----1
; F  r' s3 k7 t. K) [9 t) o   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));1 S( I# F' T: r; |' R( y
   temp=temp&(~0x00000100);/ d; G6 h8 h1 c
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0' J9 _! Y- C6 C- o2 q
   udelay(100);
  q# K  t% q  E8 k+ X' N! S   temp=temp| 0x00000100;
; g/ `/ c% f0 \# Q- H' l! s6 W   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---19 E: ?% D+ f) r5 |3 h7 ^. ]
   udelay(100);
9 t, Q. m! l6 z1 R& N- l; p   printk("open success!\n");/ ^1 z* U& j. w1 r1 `
   return 0;
! ~$ ^; p, m0 C: K}
: _  b6 M' z6 O7 Z/ _0 W6 ~! k0 w" i+ N  X
static int mcbsp_release(struct inode *inode,struct file *file)) |$ J1 b/ E7 u' H$ h
{
( q6 `' ]2 r+ S; k& r, Q# ?   printk("release success!\n");
. C) P6 C6 L( V; R   return 0;
+ G0 K: F' p3 _. n5 V}; h4 q- g. |: _

8 H5 m3 m, g: m! y  jstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
1 |& S( T* i3 @{
4 @2 e+ W- _3 m) u2 Q, F; c5 w8 E    copy_from_user(&DXR_data,buf,len);
1 ?5 r# K* h( p    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
% d- o  ~; K  |, X2 z$ }! B4 l3 y    return 0;
  C3 F" h$ i) ~( V9 y 5 q- p* H( e  H
}
, [/ V! V1 P+ e3 G  ~  R4 @+ T; h$ a9 y1 y4 j
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off). g0 y- `/ {7 j3 E' f: C
{ ' G/ H$ P+ F4 ]9 \( k0 r+ [: q% o
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
" X: e9 R. m+ R1 b2 D   copy_to_user(buf,&DRR_data,len); 6 g; N; ], E/ a( [8 i
   return 0;$ R" p+ O! v2 }+ z$ Q$ e2 V
}) A% F) W9 [! V8 I; J0 [& y5 v! c

  a4 L5 ^6 C( }* U/ R) p
( ~, W( Q% g, l3 ^! T% ?# y6 tstatic struct  file_operations mcbsp_fops=& U+ f5 A0 N- Y) y1 X
{% w$ l7 H# n1 v
   .owner=THIS_MODULE,
0 L: q0 \7 g$ r5 g& [+ ]   .open=mcbsp_open,6 |" U, A, C  ]$ o1 q5 H5 G* g; G, e
   .release=mcbsp_release,
/ h4 ~1 t7 Y) j, U   .write=mcbsp_write,0 [: }& \) e" j! p  I( K2 _. F2 C
   .read=mcbsp_read,
- F: M: n" Y" \6 F0 j};/ D! w  Y& _- v
static int __init MCBSP_init(void)5 e3 N& P( h" ]  Q+ S
{4 f8 L. [( v/ H9 n2 n, @
   int ret;
/ w  {6 I5 S8 u! J" E   unsigned  int   PINMUX1_REG_old;! [9 W- W5 z# w5 x
   unsigned  int   PINMUX18_REG_old;) w) L0 z( F" k" I# m, m
   unsigned  int   PINMUX19_REG_old;% c( H% y- j! n
   unsigned  int   temp;  
+ R  x, @% P% e+ U8 k   if(MCBSP_MAJOR)
5 r% l) N) m( k   {
, Q1 `2 g0 g: n' A" w* j/ h      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
$ u/ W$ V3 S& i& T      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);7 }' \. M- }+ P' B
   }
4 G' j; Y' A, k3 C   else
' _6 F4 L; L0 \# ~, l5 h; N   {$ Y2 I' B' J" {5 C0 Y7 |# T
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
( @1 Q" R/ f# k) W7 ^1 F: N      MCBSP_MAJOR=MAJOR(mcbsp_dev);
) {2 p% r% Z4 Z9 G6 O   }
+ N' `  v6 l+ o* u3 C0 J   " ]9 n! |: r' o
   if(ret<0)2 @( y$ m9 K# u- j
   {0 o& c8 |- K9 l9 U+ q/ ^
      printk(KERN_ERR "register chrdev fail!");1 p; H  Q3 I. d: l& u4 s( t
      return -1;3 h8 P% H' N' _7 s: r, w# C
   }5 B( j0 j1 U; ~  p  S" M0 M) i. z
   ) ~% Q7 _% S& g; Q
   mcbsp_cdev=cdev_alloc();5 t# P1 ^: p+ p3 f, L2 K
   
2 H' h# r  v3 z7 S' }1 [   if(mcbsp_cdev!=NULL)
, d( O5 i6 K/ p# c# d' k. `   {7 j) g6 j' S0 ~2 ]" R
      cdev_init(mcbsp_cdev,&mcbsp_fops);
% W0 W% }2 p+ u. ~0 Y      mcbsp_cdev->ops=&mcbsp_fops;- y# D4 [3 J; y+ u: k& Q
      mcbsp_cdev->owner=THIS_MODULE;( K% k: c  x% S; @7 k$ V
      / P$ d. e6 z/ A1 S" N9 E
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))! g) m9 |+ ^$ {/ P
          printk(KERN_ERR "register cdev fail!");
9 R( @. O# r' i3 \4 O      else
: [" j: A6 e) k2 F  y4 @          printk(KERN_ERR "register success!\n");
5 S, S1 [5 c% M7 M6 P" r& j   }  c* H- W$ x( O8 N  B
   else% @  _5 M+ e2 E' }% W% {
   {8 A: H# ^- m3 t* l2 y6 \
      printk(KERN_ERR "register cdev err!");) X. i% p8 _6 b2 J( E) e- v/ T
      return -1;! a9 D7 P3 M6 w
   }
$ N4 a# Z2 ~9 a- c   . _2 w7 u  B7 f: ]( x5 A* a
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);  E6 R' n8 O8 C$ f) R
   if(IS_ERR(mcbsp_class))- N. V) C) B. v6 o4 W
   {( ]/ j0 x) m: T( ~. a# G" P
      printk(KERN_ERR "register class err!");" F) h# D+ B% i! B. {$ V  E
   return -1;
+ n1 D/ z( N( d6 R6 N% G   }" b, x$ E" T* A2 j9 r
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
6 A# k1 d8 W" l2 z% W; T
/ `) }9 `- L" D- h7 r6 Q( z   //PSC6 X' Z8 I' e/ O4 x# L' a" A! h
   //add Enable MCBSP! Y/ t3 S' h0 T- h1 z, ?
   //test
; H$ |% p0 c; D9 x2 @   temp = 0x80000003;: f4 ~7 G0 g; C6 T! V
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));9 k% |( K: n7 h; j6 @
   temp = 0x00000003;9 l& x% {$ V3 F  i$ b  h
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
! w  @/ `2 k' b  O: }. j) P6 ?
( o; v5 ~9 R! `& d   temp = 0x001FF201;. b2 I# g( ~7 j+ I: c$ F
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));& S( X3 q- ?% C# {2 O
   
8 ^# b; ]$ t. G3 ]5 k/ G   //PINMUX  
) U& Z4 U( F  q' g6 L2 N1 |   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,1 y1 J( A+ }1 G5 V. O; ]6 E
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  + V! k9 S4 v: K4 C) X
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ; O* U8 V, @7 a; A% j
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
: e( b' f: H6 C* h' f0 b4 f0 q   ' `0 ]* N2 L. P4 ]3 ?% s$ I
   //SLEEP_EN,EPR,L138_SHK1,L138_RC7 G7 S$ Z) Q# E
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
  E  F* T5 ^; T" ^* Q& ]6 C4 y   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   8 }5 I, L5 k' e+ D" J* ]
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);( F- k) \# J* C

- n$ H/ o5 u# d( _   //RESETn,L138_SHK2! A3 j8 {: s, x
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  " a) ?; }2 y& H9 Q0 g2 m- H- n
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   9 ~) {; y* j$ Y/ K
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);( a. p( r% v, Y% p! A! H
# D1 P( p. I7 r
' C2 k; u  T9 R& M" v
  //SPCR Register1 G7 u# _8 y+ n" ]* H4 s9 I
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
$ N- J$ Z: x# V* a  temp = 0x03000000;//(DLB=0)" Y( `5 `: @6 S6 x" u
// temp = 0x03008000;//(DLB=1)( m. V9 D4 N  }$ H
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
! D+ ]' y+ P0 n) H0 v  temp = readl(IO_ADDRESS(SPCR_ADDR));/ N# C# [  {5 t: n- S, Y& |9 W4 k
  printk("temp=%x\n",temp);8 J  d  s  G* b. l9 S

7 ^  k- }% k0 [- A   //PCR Register
" t8 k, |: ~0 A   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
7 e6 U- A7 ]* ~; \# d  // temp = 0x00000F0F;
; w& j' }1 B! d  temp = 0x00000B0F;& I- c$ l& z/ Q% y$ d# l6 F) N
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized " i. L+ b6 W: }2 @  a# E
  temp = readl(IO_ADDRESS(PCR_ADDR));. [  y. A: k& U0 }: v. `
  printk("temp=%x\n",temp);  3 [9 M' l# [: {7 @& l
   //SRGR Register
( p) V; F- x4 k; `& S   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==116 I' z' w: s9 {: F
//temp = 0x301F000B;
. v) [% N# `+ k9 N   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized . @6 y' D- Z: l* N6 T4 o4 ^
  temp = readl(IO_ADDRESS(SRGR_ADDR));
) f7 A, b) L0 T  printk("temp=%x\n",temp);  R6 A* R8 Q9 p
   //RCR
$ g0 A- r2 k( X8 X5 P   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,- h0 y+ |  y9 ~/ m8 K' Z- X
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
$ v/ }# p8 H2 c8 e: w   temp = 0x00440040;9 E: {5 X( B* z9 ?( ^
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
) \$ f- Z4 L, i8 \   temp = readl(IO_ADDRESS(RCR_ADDR));
- C1 r  ~- P5 S, V   printk("temp=%x\n",temp);! |1 l. O0 ~' Z0 s. ^8 G
   //XCR/ h8 g$ @8 @- {3 @( I: R7 h- R6 G
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
6 l4 Q' {' g/ v2 H! v% }   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
$ a/ r, a' V' v6 S0 \' ]6 n  G* d0 C   temp = 0x00440040;# N& ?0 R4 o. U2 U
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
3 N% k% `' {( B5 y$ S8 s. Y   temp = readl(IO_ADDRESS(XCR_ADDR));
: [4 E$ T6 Y8 G   printk("temp=%x\n",temp);, H* e8 k) T: k' F" B
  udelay(100);
  P! ^7 a4 u8 P) U3 \. D! J  //SPCR Register/ m9 q; U# ?) n/ U, X# j) k. g
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
% x9 e. V' l: T% L! O0 ]4 i  temp = 0x03C10001;   //DLB = 0 VS DLB = 1+ `7 ^$ F8 w8 h+ Q* u7 e8 l
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
9 ^& A% {0 o& D4 ]  temp = readl(IO_ADDRESS(SPCR_ADDR));
1 b: l7 i/ [6 j: j, p; _) y  printk("temp=%x\n",temp);3 P/ `/ I' U) W- }; F$ w5 E
  udelay(100);  K- J3 S- t6 I0 u1 Q

. N0 f% @7 s6 J  //set GPIO direction3 V8 a- @+ z/ f% s" @3 w
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));# j1 ^% j3 l1 X8 Y2 [  G
   temp = temp | 0x00000100;//EPR----input
+ w! k- Y3 ^7 g. K- p9 z   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output0 C  `# m; j. F& j
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); + B; e- v* b2 t9 W  n( \4 W- D/ o
- U0 N6 ?4 L# p+ t. g+ y
   return 0;
, N$ A! e  F- D8 S3 U}1 g9 q$ v+ p# g+ H1 [- H1 N
static void __exit MCBSP_exit(void). J7 E  s# N& f: S" s+ @: i/ \
{
3 `- @/ n9 u" C6 [- E* M; k9 E  P   printk("mcbsp chrdev exit!\n");
0 D# G0 V6 q& ~/ n& l6 T# k1 b   cdev_del(mcbsp_cdev);
; n0 ^1 w& m( K+ s: L# }6 g' F   unregister_chrdev_region(mcbsp_dev,count);* k* Q2 f9 s' T1 X3 ?. x
   device_destroy(mcbsp_class,mcbsp_dev);
4 L* b9 K* S: H! S   class_destroy(mcbsp_class);
0 b& ^. d2 N/ ~" c, @" f}' A, i5 t* |( u( E- p# @+ i
module_init(MCBSP_init);3 \' l# f" |+ y3 [. W
module_exit(MCBSP_exit);
+ F: B! s" n" Z, u
+ E# q* P1 N1 U8 CMODULE_LICENSE("GPL");
8 b; T: R- _0 r* C% @$ l$ R: e) N
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。6 X) w  k+ w" L; c# x) [/ ]5 ]9 E
我的应用层的测试程序如下) s4 Y5 J, U# p1 G$ [# `; g
#include <stdio.h>
6 v/ p4 A* h8 o#include <string.h>& w- @3 P3 X6 s0 V' W' R
#include <fcntl.h>
! O0 B# o+ ^# O) z( j# j#include <unistd.h>
( E8 T1 U3 D3 p+ t2 _) _9 B# s#include <signal.h>2 ~- T7 B  _, o9 G; S
#include <pthread.h>       //线程+ K1 O" H* O: `8 s" i
#include <stdlib.h>& o0 t) X8 @4 [- `. {6 S
#include <pcap.h>          //捕获网口数据
" \5 ~# `# B4 y% z* |#include <semaphore.h>     //信号. o! z& T! r$ C' W5 \) \, ~
#include <sys/types.h>     //消息对列" e3 _1 p" s- Q) i& p, X
#include <sys/ipc.h>       //消息队列
2 v2 V. @  z, e: `, r. E; v2 u#include <sys/msg.h>       //消息队列# p2 @' F" S  W. l- \# Y
#include <sys/select.h>) D" t' D0 \. r3 k# W
#include <sys/syscall.h>
8 }  E  ]3 K4 w#include <sys/stat.h>9 U; w. k) I( [6 f9 m, Y/ t
#include <sys/mman.h>
5 \& k- h+ i* i/ Y3 d* b#define msleep(x) usleep(1000*x)
. d$ e: k( K  r1 ?# T( c. m" _( [+ k) }9 j8 M  }
int main()
- `# p7 {' R# C# H, D0 w2 C{
1 M( M9 ]- P: S% C    //MCBSP,ARM与AMBE2000交互设备
# S% H# E% Y9 K( w* V; t$ x  c int fd;
7 ~/ s/ S( d% X, U' c9 t unsigned short data_write = 0x5555;3 a3 T+ @8 I; a* `: P( v
unsigned short data_read = 0x00;- L6 Z2 Z" r9 W2 u2 J
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);( w' q: ?) @$ p2 _7 P( t" \3 c
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);/ x: Y4 {: E3 \- a
      Z( ~& m+ e' W! d
  if(fd < 0)$ x. q. Q; w/ V, K. [0 V3 \0 C& }  T
  {0 u. t) P  h' R% L* w0 V
     perror("open failed\n");! p* G# _$ `$ c; ?
     return -1;
/ K1 s* l9 q6 K) [2 D  }1 }+ {" _  \$ x( C% I9 ^3 o* b
  
2 m( L$ B, x+ g  while(1)
0 w6 N( w; ^4 T  {/ g- P, K* F# q( O
   3 l* g, b, Y6 \+ F2 _# g
   //AMBE2000每次读写是24个字为一帧
3 ?3 y, K5 b' }% Z: Y* \/ E   //写数据时将数据在底层存储起来,等到中断的时候再发送1 }. }. c% ?. L- Q7 @' m
   //AMBE2000输入数据是以0x13EC开头的
  r4 h0 w. T1 c5 @7 P" }   write(fd,&data_write,sizeof(unsigned short));
9 p4 C4 L. `7 i  W! T   
/ @. n; r% P( t5 |/ D9 K   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
* U7 @: F$ Y  O" ~8 l. n   read(fd,&data_read,sizeof(unsigned short));
& V, f6 |6 ?+ u; C- O" U1 I   
0 ?; ^: t' ?+ _! g5 a: k+ \6 I3 w   if(data_read == 0x13Ec)
3 h7 q  }) G& f) u$ e9 C# A   {8 n, H1 B# \( @# M; N
   % s3 x. ~) g. P/ ~( |) a! w
    printf("data_read = %x\n",data_read);
. W0 H7 r0 R2 S5 y   }
/ ~2 {3 s: }* f% k- L   
: {, G$ C( e% o: L  M+ s   msleep(10);8 t2 e3 [5 j' w6 X& b/ M
  
/ p8 H6 U- @& g) k: M/ B+ L  /*0 t+ i9 W' c/ ?; A# ~. {
   ioctl(fd,1);   
4 b( s+ l0 l( y. @ sleep(1);
9 [9 z0 F' B/ [6 j' D3 r ioctl(fd,0);
+ z* l6 N. R6 }: O5 J1 k sleep(1);
  C/ o" d; Y- r" { */ 6 `- ]7 _) C6 U
  }   ! s' [) s9 ^/ i: s( o, O
return 0;
! K4 n2 x9 V1 s8 k # H" B& v* @* l3 Z( s% b' H
}
7 K$ x* B' L9 S+ o  V& M
! k* v$ b$ Y5 |+ N! ]) i+ {多谢各位指教,谢谢! 急. `, P2 n1 u* M0 A3 {) [
3 K6 i5 {5 d2 R+ C
( l& v2 O* f  y3 e) G

! W3 t) F3 ~7 s+ R* V7 v+ [& W
$ i% _% w* K5 C, r; \
- `( R: M" J5 F/ J* u. g7 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 20:26 , Processed in 0.047255 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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