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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 2 _3 [& C: z6 U) [# P
/*
/ e4 U* C; P% r4 x* a4 z * Copyright (C) 2009 Texas Instruments Inc& U; p. G1 ], L" U  W- O8 T
*
5 G% o1 F! E# r: W' }7 j * This program is free software; you can redistribute it and/or modify2 K3 g% G$ o2 @) t9 x( Z) ]
* it under the terms of the GNU General Public License as published by; P6 C' _. b. j- q0 ?  ^
* the Free Software Foundation; either version 2 of the License, or
2 q# ^9 b) ~( K& x5 |0 E * (at your option)any later version.
" b' Z" L+ ~, a" R *
5 d( I1 ^: |  [ * This program is distributed in the hope that it will be useful,
4 r- x. n4 e; w# a& N1 Q( b2 y * but WITHOUT ANY WARRANTY; without even the implied warranty of
% \2 r* I5 t1 k * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" I# _6 s  M, x5 h * GNU General Public License for more details.
$ P8 y7 s* c  V/ t' L9 K7 B *
/ Q$ x3 u0 ]2 u5 X/ a1 H3 A; Y * You should have received a copy of the GNU General Public License
/ O  M5 `8 F; G& y( Z, F * along with this program; if not, write to the Free Software
8 X4 Q0 W3 I7 C) G, o0 I1 i * Foundati2 W3 W+ q" d9 }* a
*/
* a! B* f4 |/ ^& ?1 X1 x#include <linux/module.h>
/ H- _; ~2 D; a: _#include <linux/init.h>
: z% ^+ ~! f8 b0 v#include <linux/errno.h>
5 H0 ]& w- C  `7 @: J& d$ N, u#include <linux/types.h>3 Y' X" k" P9 x: m. A6 f
#include <linux/interrupt.h>8 A: s2 m' A9 V8 w5 l6 [+ ]
#include <linux/io.h>
; l& j# Q& d) [  m4 `) O#include <linux/sysctl.h>
- S6 C: r6 Z2 H#include <linux/mm.h>
) M+ A9 m& R! ]3 J#include <linux/delay.h>
* a" j, Z* p2 B/ @* p9 m" L! K2 D5 C#include<linux/kernel.h>
3 B6 \% T% |6 L  V2 v#include<linux/fs.h>7 `( M+ E) x6 [; D, s$ i& T
#include<linux/ioctl.h>
- U7 r! \# W; v: h#include<linux/cdev.h>
: B: N  a; }- Z+ ^! p! q#include<linux/kdev_t.h>
: Y2 {6 _+ I" r/ ^' H% D#include<linux/gpio.h>4 L% z  Z  ^: \. o8 m
#include <mach/hardware.h>
% @' |. c% x. N' C7 w* ]* Q#include <mach/irqs.h>1 L  t, L- c: h

: d* s  H+ }; d! X+ N$ B7 v; \#include <asm/mach-types.h>2 ?" L% ]6 G" _  Y
#include <asm/mach/arch.h>
7 h$ o0 g* q3 v' _; A#include <mach/da8xx.h>
& U0 n2 l' U0 d) L#define  SYSCFG_BASE   0x01c14000( {8 W2 O. _$ b5 S) S
#define  PINMUX1_OFFSET   0x124
. q& r6 ~! _8 e7 @  [3 _! O" F#define  PINMUX18_OFFSET  0x168
& K: R8 g/ q1 U8 X0 }# V* ~#define  PINMUX19_OFFSET  0x16c
* Z* ]: O3 ]6 n9 ]; [1 d# K#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR. P  f0 s* B9 j" e, U! @+ Z
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
5 I' d- d* p; w#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
& d& Y* w/ t0 f, _; m#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR% `: I: U5 x# X# m1 a2 R
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR! {2 w  G, d. C( k2 I; J) S, o; i
                           
. D7 I0 G: B; z; r8 h' q0 x2 K! t#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
" t: l4 e' z9 }#define DRR_ADDR      0x01D11000  //MCBSP1_DRR" ], ~( E* V. ^4 k) M, s( B; S3 g
//PSC
8 P) c8 g& y4 T0 h0 h# }0 A#define  PTCMD_ADDR   0x01E27120  
& Y  F: y+ v0 ]5 V$ {/ p* j, e#define  MDCTL15_ADDR 0x01E27A3C
% r9 e6 Y5 B3 C# j#define  PDCTL1_ADDR  0x01E27304! X0 J, A/ Z! X3 t
//GPIO8 direction  Q. Y# u  y: d" y9 o
#define GPIO8_DIRECT  0x01E260B03 p; i( ?2 Z6 r) M( ~
#define GPIO8_OUT     0x01E260B4! v2 _& }, F: {# ?
#define GPIO8_IN     0x01E260C0
4 v5 e' `# W# I0 z) d# @* X, q7 x- L: s7 E" t
//#define MCBSP1_RINT    99              0 G: c! C$ ?* @) i
//#define MCBSP1_XINT    100  7 c/ X2 Y# ]- y5 Y
static int MCBSP_MAJOR=239;
. i7 V/ t( K, Istatic int MCBSP_MINOR=0;
! \: y( H; Y" _, _) Ustatic int count =1;4 X  y) L3 C$ U  g

. u6 b7 ?  @5 L) W1 }- q/ `#define MCBSP_NAME  "MCBSP-device"$ _" I; D2 {% N1 W

4 X+ N; }# S* w1 f) U% j4 d* |3 T* s! Qstatic struct cdev *mcbsp_cdev;
0 V0 `0 H, {2 v2 u& a* z2 R# [  nstatic struct class *mcbsp_class;, X" a6 J. X; l. O! y
static dev_t mcbsp_dev;1 b% N" b. t- q7 }( ?
unsigned int DRR_data;4 k" R3 A: R) g. }
unsigned int DXR_data;9 p& i' _4 A/ J3 H
static int mcbsp_open(struct inode *inode,struct file *file)
* Q; a  J! H; N# r+ y{
. X* X8 R( ]( d0 g- X3 L% W   - O1 w9 r7 k& `5 D+ _* U
   //interrupt enable,initialized6 G5 G; w( x! `- V
   unsigned int temp;
& F" b7 b# @* h. o/ S   //SLEEP_EN(GPIO8[10])---01 o% y" N5 M1 y, E1 u7 s8 d
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));; p. W) U+ {7 z  v$ p& |  L
   temp=temp&(~0x00000400);
& L8 w# N' ~. b4 e/ ^7 R0 ]6 A   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
- b! S7 n3 r  O$ ]& s9 |' \  //RESETn(GPIO8[8])----0----1
8 j9 M/ k- t9 S5 j; s0 _0 a   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));$ D- j2 Z- w# g; F2 k
   temp=temp&(~0x00000100);* i; D3 a8 \3 F& v8 Q
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
6 i: W+ g/ ~4 z% m: F   udelay(100);9 K% ~& w. @& c* R+ L- W7 _$ G
   temp=temp| 0x00000100;
" I2 r, _+ q+ f5 h- S   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
* H7 H* K1 x/ o! F5 z: P* t   udelay(100);) s' P4 |9 @- J' N/ O
   printk("open success!\n");- p3 a3 \) Y5 g& V2 C) s
   return 0;
/ T) S4 E( F" v# l% w/ X}! f* s" q9 x/ `1 a
, D' M. O  p$ k' K# G
static int mcbsp_release(struct inode *inode,struct file *file)1 i+ ~, a* z0 }3 \( ?# U" e
{& S+ W5 Q$ H1 `: @
   printk("release success!\n");# V- d8 y& k- b4 }8 W
   return 0;
* x5 g9 o1 w+ p9 J& j}, t+ M, f, \3 Q
0 F7 g. p4 {/ W  R* ~
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
- Z, [3 B" E" O- |5 ?{- U0 u& _' E8 X- Z
    copy_from_user(&DXR_data,buf,len);0 Q! s% W4 z5 A4 U5 X- [
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
% [/ p, e/ I. g' i0 e3 u- \7 C' K    return 0;7 S2 n6 ^. {" _6 U

. }0 {  f. X3 J7 Z7 S: e+ ^7 _}' n- ^* J0 t4 m* s" ]
# Y" N9 f9 K/ w7 p2 _: w6 q
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
$ d- t/ v- j# l) E{ : r: }& Y. h- e7 }# ~6 o9 [+ a  m
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
2 e! V6 j2 Z+ K# l3 a- r* E( r9 `& Q   copy_to_user(buf,&DRR_data,len);
; n' l8 U( Y( H   return 0;
# g: K; E6 o" c( [# u- |, ~+ A}
8 s8 M" }; L% i5 O
) R7 h. R# U( `
. P& G* @3 H& wstatic struct  file_operations mcbsp_fops=( M% O6 E) Y4 V# ]( Z+ I- F0 z9 F& o
{
' c9 D1 V: L: M7 G   .owner=THIS_MODULE,% u% m1 L/ v; G1 d" H, m5 n
   .open=mcbsp_open,  m: c% v. q& u( c, F
   .release=mcbsp_release,
- E, F- N8 k: T$ j' O( m5 d9 F# }9 D   .write=mcbsp_write,
, Y) i) C, y3 o; d# v3 L9 L0 ^   .read=mcbsp_read,
) j- C  |1 J2 R7 b};
& s: g' e& o) A: m+ Z1 o2 xstatic int __init MCBSP_init(void)7 a2 t1 ?, V2 x
{& \: O5 q' x8 X, T
   int ret;2 S( n: A+ ~. _7 C' U+ z) F
   unsigned  int   PINMUX1_REG_old;% K" k8 c, M- }
   unsigned  int   PINMUX18_REG_old;
- P" Z7 _7 n" K+ k   unsigned  int   PINMUX19_REG_old;
$ ]. L* Q+ z6 _5 ~# i8 H   unsigned  int   temp;  0 A( P. a, j" l# Y. X8 c4 i
   if(MCBSP_MAJOR)
/ b! |/ ?8 G  l8 M" S   {5 f5 v3 [6 K! B, B: l, j
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);3 ]( v4 Q! V4 U  }4 Y& I. `
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);/ x8 t/ l4 H' ?3 N6 `& o
   }+ Z% e; P. G: e, \
   else1 V4 W$ }& E# z5 {$ j5 G4 ?
   {8 c& @; j; g9 E) D' R' u
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
. v- a8 w0 P' L: E      MCBSP_MAJOR=MAJOR(mcbsp_dev);3 b4 J- p" c! k5 j  S( \! E
   }! a2 |5 |- ^3 W# \5 ^
   ! F. J. _  E# u6 l  S) o; |
   if(ret<0); n( K% J, M, T4 \
   {
' ?8 I6 i5 y3 q0 g) ?2 n, `      printk(KERN_ERR "register chrdev fail!");  l) ~# I) x) z7 p2 [
      return -1;# l$ v( S9 b; [/ K4 a
   }- q& w+ k5 w2 P6 o/ s# y
   
4 d7 D& P$ R7 `   mcbsp_cdev=cdev_alloc();
; }3 o" r9 O  p2 ?% N$ i   
4 B0 V" u: k5 X- C   if(mcbsp_cdev!=NULL)7 K: q! F& {7 T0 |! l9 p
   {
% R# y+ L* t' m  v# W5 X      cdev_init(mcbsp_cdev,&mcbsp_fops);
& Y" T7 s1 d- |  M      mcbsp_cdev->ops=&mcbsp_fops;
+ Z3 U( @. a2 E( F      mcbsp_cdev->owner=THIS_MODULE;
. g" L2 v& Z* H& I4 U5 j& k3 m      
3 }+ g1 A6 B, r* N      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))' p8 x! U( i+ x; L# |1 C% v8 u2 j
          printk(KERN_ERR "register cdev fail!");
) e/ P; K) \+ H4 W; r7 i      else
/ T; j+ {+ i  j2 u0 M8 X# w          printk(KERN_ERR "register success!\n");
% c# r: `" N: N7 h4 H# t! `   }  l: I" Y" ~/ S9 t/ r9 h- k/ ]
   else
- e6 m+ U: Q! h$ o   {
. P3 V6 o) o# P      printk(KERN_ERR "register cdev err!");( w" r4 O1 ~: h
      return -1;
: r1 P3 [/ m4 q; m% A% b   }! `+ R1 S1 x/ i5 N
   
: i/ F' P+ \' J8 s4 y) L  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
. [5 {6 T8 g; X+ v3 ~   if(IS_ERR(mcbsp_class))0 U. ?, Y$ V) I
   {
. n* D2 |  b; E      printk(KERN_ERR "register class err!");
/ U; p/ x  X5 Y/ e# w" Y   return -1;
  O* H% L4 v. j6 B  D9 U   }6 F/ A  R% H8 K1 [" t
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
2 G0 w1 p( a+ D3 w' {' m8 ^  Q& U* j0 l
   //PSC8 T2 @! u' s1 U$ @6 Q. t
   //add Enable MCBSP
" m! i. t9 X# Y3 T! i   //test( e" X! q7 g% u- ]* n1 m# z- [3 f7 Q
   temp = 0x80000003;! C! a( K1 a& f' Z. d
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));# c1 u: B4 F& B! u0 j4 B# C
   temp = 0x00000003;7 ~5 w6 }9 g! I# N+ c1 y
   writel(temp, IO_ADDRESS(PTCMD_ADDR));5 \2 N8 R" X+ b

1 I. I: W, @( W/ j" j& p   temp = 0x001FF201;
5 \  S: w) V9 a: Z0 q9 U7 r8 p2 L! o2 R   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
, ^; E% m2 a5 Z; u- d" T' y# d   0 L' v8 q- W* q9 K9 B: v+ g  E9 w
   //PINMUX  * A! {. I% V$ h& }+ u/ l
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,& u- M- c: ^5 n' x# H
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  : Q" B5 k2 u+ B" m- N5 Q: w- w
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   1 W% Q2 [+ I* H: }5 |. b
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
, m# \+ T7 c- A) R; Y   8 q2 g) `* H3 ]9 z6 x6 E. I) \
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
- U6 t; e" k2 @$ U" j6 M- X   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
0 m& t# N( w& C" _  l; Y1 q2 O9 D5 T   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   - c2 z0 X) f4 _3 f
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
" |+ E' K" P1 W8 K9 F5 n
7 [, y- k% P. g1 Y6 c" Y   //RESETn,L138_SHK2
' @- @* v( _/ ]   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  - w4 I+ B2 T; I* S8 `9 n! B8 c
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
! j3 U4 G5 A! f) Z& c   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
! |! k8 _5 y1 l( l8 b& I, E2 b/ h0 Y * Q; u: d; T2 O7 D' i
' M0 ]1 l& K7 q  h# k7 t- G# _
  //SPCR Register0 ^1 n' u6 X, t# ~9 q
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
% a7 s; C2 E& Y, ]2 I  temp = 0x03000000;//(DLB=0), {" u+ @, i  q1 Q8 T
// temp = 0x03008000;//(DLB=1). F4 {; Y! e; Y5 m' d( t( x9 }. [
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
! I; ?% c$ b! J5 j  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 J; }* q5 v+ D5 _! j9 G  printk("temp=%x\n",temp);
- K; U* p3 S' w1 K$ e: R  a. w ) o: c+ }; z+ m. \7 w
   //PCR Register
- _3 E9 i# d* B- {* v) L   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0* }. A* ?1 `; g/ t1 t
  // temp = 0x00000F0F;
8 Z8 A0 X7 w: c: L" o( y' h5 Y  temp = 0x00000B0F;
8 q4 J; e6 i) N3 o; G( `9 T  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized + |4 |2 S. k$ c  X  A& J
  temp = readl(IO_ADDRESS(PCR_ADDR));1 E) @6 Q4 A" a4 |" s& X
  printk("temp=%x\n",temp);  
" Y' ?' O5 s0 k0 v! D   //SRGR Register
* \9 e  B$ Y, H/ V' L   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==117 A1 C( `2 f1 {
//temp = 0x301F000B;! m/ ^& N& A) u5 X  u% s" [
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized : U' z: l, ^9 w' G
  temp = readl(IO_ADDRESS(SRGR_ADDR));
! e+ P/ A& X% \! m0 w  printk("temp=%x\n",temp);
; K9 P& S) p% G/ L2 Q   //RCR+ S& E! H# m7 x0 }, F
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,% `3 k7 q% R* [: O8 D. i& e
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
" x9 Q/ E' `5 e* {   temp = 0x00440040;
& c3 {- J9 p/ K   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
5 u/ v* r8 |. D1 U( e/ r$ q   temp = readl(IO_ADDRESS(RCR_ADDR));1 p1 \6 U2 f6 ^+ V
   printk("temp=%x\n",temp);( }# V/ E# W/ ]4 P9 \
   //XCR9 P  T) O+ _& s0 Y+ E
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
4 \6 I1 {6 {0 R5 x9 y" C+ n! }) }   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-03 D9 z$ ~* a/ S$ k3 O- F
   temp = 0x00440040;
: z- h" q9 c3 G2 N* A( R! i   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   6 r8 ]: G4 q; c& S
   temp = readl(IO_ADDRESS(XCR_ADDR));
7 r! v# m8 `' i- P1 c9 ~  p0 L0 ^. [. G1 r   printk("temp=%x\n",temp);
, r! g% n: {  _1 ^  udelay(100);
7 W9 n1 w4 r- r- u  //SPCR Register
1 A$ ~7 N0 ]% W8 X  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
' c2 U7 ~' M8 o( y. Q  temp = 0x03C10001;   //DLB = 0 VS DLB = 1; T4 _/ N& O! e' m* Z
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
) R) j, [- j1 P7 Q% B  temp = readl(IO_ADDRESS(SPCR_ADDR));5 y7 s9 x, B/ X# _. @2 A: p1 W
  printk("temp=%x\n",temp);
  g3 w- c. G8 ]7 Y  udelay(100);
! y5 O0 `3 A; V8 h. |" P8 V+ ^0 r3 U
. b9 O  p6 H! L& P+ g5 y( x, I  //set GPIO direction
1 B3 d# g6 O5 `   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));! s6 Y, M5 {) N8 @5 P% _" q
   temp = temp | 0x00000100;//EPR----input
4 b% h3 W+ y' p* @: g- N   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output7 f7 d0 m( ?+ ^9 o. K
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 9 K4 M$ _8 e& X( Z+ [; w

  w7 ^% I7 |: p- b; X3 ]   return 0;- [2 g1 u3 M8 V% ]
}
; V: C% H/ Q1 M6 n. c7 B, B" ustatic void __exit MCBSP_exit(void)7 E! M1 n5 J! P4 N
{
8 ]! E8 B: q4 E   printk("mcbsp chrdev exit!\n");
% ^9 Q5 a; ~0 T6 J7 X$ t% X1 {# u   cdev_del(mcbsp_cdev);' x: C$ e  U% @6 v7 j; v/ q- H- t
   unregister_chrdev_region(mcbsp_dev,count);
- P$ ]" y* _( m' U   device_destroy(mcbsp_class,mcbsp_dev);# T* g: U0 o  e/ ]/ l9 e
   class_destroy(mcbsp_class);$ |6 y5 h, @( E: T1 s; h
}
9 o+ k4 m& D) e5 d9 m% U  lmodule_init(MCBSP_init);; I2 z8 H" D, I4 N
module_exit(MCBSP_exit);
9 C3 E. \& j4 p1 @# A. P% O8 |/ B) f8 K+ `* n+ m
MODULE_LICENSE("GPL");! P4 {: r, J& i1 e% w. q

6 I+ n( I2 i( @9 R$ `! |/ [! W6 I我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
, P8 L! q5 i" e3 ^& N; L# z我的应用层的测试程序如下* ?# n2 A, q4 C3 P+ m+ |/ F. Y, \
#include <stdio.h>
, f/ W: w. E! V) K#include <string.h>
$ _* t  U' }* d% X8 B, O! k* ]#include <fcntl.h>% K: p- M2 _4 F( ]
#include <unistd.h>" E# H* d" \2 t; i, b+ z  F
#include <signal.h>
5 b9 O# K, L; c+ D. v$ l* B#include <pthread.h>       //线程
+ ]1 \2 @8 W3 s% D( _8 l+ A#include <stdlib.h>
  [( Y. D1 {/ K, V6 k" U#include <pcap.h>          //捕获网口数据, D* R1 b5 u" R- b( j! a5 b) B* I
#include <semaphore.h>     //信号. c, c0 G) y6 e* S* g6 c7 a
#include <sys/types.h>     //消息对列
. _, J: G) A! i; C/ p0 X* H#include <sys/ipc.h>       //消息队列
4 b  [% ^; \" Y5 n; f#include <sys/msg.h>       //消息队列- ~% V/ U7 n# _7 F
#include <sys/select.h>" C6 B# b* y( T( {5 w5 r
#include <sys/syscall.h>
+ l! D) D5 j( s2 C5 x#include <sys/stat.h>( J( I, h7 I- X: @8 Q
#include <sys/mman.h>
+ E5 q( ]7 ?6 X# x8 c#define msleep(x) usleep(1000*x)
$ C8 [, M9 q$ m- c7 J. X3 `2 y0 c3 z" C6 ~
int main()
; n2 V  K# [1 b{
: t6 {' a/ k: s+ o! `/ X3 S: Y    //MCBSP,ARM与AMBE2000交互设备- Q7 ^6 G- f) l+ l
int fd;
9 h% M1 N5 m  x unsigned short data_write = 0x5555;
3 b' s  ]5 y  h1 B( ` unsigned short data_read = 0x00;
% l* Y5 S* a4 V6 A  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
! N3 P9 x) E8 u" z //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
/ {- N" f0 M! R" }& s5 D    . T$ n0 q- |- r3 l! e, g
  if(fd < 0)
! t5 B; f8 R5 F) M8 Z# c! P  {0 E1 ^9 G: E2 @. V
     perror("open failed\n");
6 B" q, ?. G7 j) b0 @' M     return -1;
! U8 F3 q- P' l, r5 X4 ~( t  }" r2 k1 K8 u* t8 ^. f4 Y7 |
  
; d% k( R* u5 O9 t5 i/ ^3 f9 g' ?  while(1)
, I5 T- O3 t/ i8 H  {
( b( }: J: t3 ~) b: c/ K   
, C3 [4 |' O% z5 @* B' T$ N& Z   //AMBE2000每次读写是24个字为一帧
( r. e) y8 K- n/ z   //写数据时将数据在底层存储起来,等到中断的时候再发送
* k" u  y% t- m- Z( w   //AMBE2000输入数据是以0x13EC开头的- K  ]2 o6 r0 q* k9 X1 m
   write(fd,&data_write,sizeof(unsigned short));
4 Z/ _3 ^4 ?4 u5 x! p* `* V   
5 X7 E+ n- Q! h( W* D% e   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
# [9 @# h9 n0 d; P8 t   read(fd,&data_read,sizeof(unsigned short));
9 M; q( g4 E% D; B   9 o! w8 g" t! E/ D5 ]
   if(data_read == 0x13Ec)
! T0 Z) [% r+ R' @   {/ }. G  U& G0 O' H
   
( G" {  D( ^/ N; [. @( Z/ M  K    printf("data_read = %x\n",data_read);
; v* b: t0 E5 T   }
9 O3 e" @& k0 ~0 P0 t! \6 i4 h# m* O   / W2 `. p: t& I- N# Q
   msleep(10);# c5 I- K/ R7 Y' W; I. k
  
& J/ o3 h7 b/ X' M9 f7 ^  /*
: z5 g! E/ l' }; K7 L2 H   ioctl(fd,1);   ; b& r+ t5 M0 c' m! w
sleep(1);! `+ V; n5 j' g; l
ioctl(fd,0);/ o4 N* B7 _- A
sleep(1);
- V' `: |. ]( e  j7 _3 t */ $ e8 X: [3 M. D9 P* f/ o* R& V
  }   
3 ~3 w8 C3 v+ `- _. ]- { return 0;- v; S' n) z6 d# T+ v

# R" T5 B" f( w. R; G. ?}& y) ?" L. a, J! D, {
8 V% E3 @7 {0 A/ b9 q) ?% o
多谢各位指教,谢谢! 急
2 F$ E- y/ z. b! b6 \; Z7 y& Y# o9 @& r  t

4 {$ o; v3 u+ E; i
. a1 V% z3 J7 k* b
  \( Y: n6 T% }+ l& S: V" A. w2 C; N, _* s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 09:05 , Processed in 0.039189 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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