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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
4 ^! n, G5 s# u6 S3 ]  j! C/*
# w. Y' p+ ]& K * Copyright (C) 2009 Texas Instruments Inc7 W  y6 q! J& ~, y  A
*; j# B5 ?& Q6 z9 H) l# ^# h
* This program is free software; you can redistribute it and/or modify8 ~$ Y/ I5 Z+ `6 c
* it under the terms of the GNU General Public License as published by2 {- W: ?& V* d
* the Free Software Foundation; either version 2 of the License, or
3 O" a7 x7 _9 b! g; a" I3 u* o" l * (at your option)any later version.
+ {1 |1 i, c8 I */ [* G* E7 `; ^+ j0 \! p. J: C
* This program is distributed in the hope that it will be useful,  V; e) l# {- i- N
* but WITHOUT ANY WARRANTY; without even the implied warranty of  i+ W2 m8 w1 @
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# [' `5 O( f+ N6 I/ i
* GNU General Public License for more details.4 i( D0 W# }8 `& N+ s
*
- ~- Z+ t2 K% o+ C$ l; n- D" }( F * You should have received a copy of the GNU General Public License
: J( q( Y( [. S' j0 R. I * along with this program; if not, write to the Free Software! {) c) Y0 C$ l6 h0 P% O5 p1 Y; Y
* Foundati
: w8 k3 q$ X" S3 R*/- I  R8 i1 Z1 W4 z
#include <linux/module.h>
, L+ j2 c4 J7 q#include <linux/init.h>
# R: }  x+ D6 m7 f/ y#include <linux/errno.h>5 ~$ O5 C8 }) B2 p
#include <linux/types.h>3 I! f/ W  q( [1 W" I  Q
#include <linux/interrupt.h>
' p$ `6 f) }6 g- `' P7 F#include <linux/io.h>
4 D7 Z9 y/ W$ h/ ~# \#include <linux/sysctl.h>' S' r! k. X+ b" Y! A
#include <linux/mm.h>
9 z# o; Y0 O! K, a) B& f0 R#include <linux/delay.h>
" Y/ l5 q4 n3 Y( o8 B#include<linux/kernel.h>2 H# @. R3 |/ P$ S
#include<linux/fs.h>* S: \- Q4 d% c% q! w
#include<linux/ioctl.h>+ o! I) f& C5 O. o1 H# E) X' \
#include<linux/cdev.h>
+ e4 |# Q( V- R) s5 ?8 ^5 h/ d; Y9 ~# z#include<linux/kdev_t.h>
1 l4 `# s+ V; i, [# y! L0 l6 v#include<linux/gpio.h>
% @( Y: ?" l4 v% y8 d#include <mach/hardware.h>
  s6 ~( M" q! k( d5 b# z0 s/ B4 @$ S#include <mach/irqs.h>
0 c" d+ d4 c' v0 @9 ~
' n. a. y; d2 g( A- S#include <asm/mach-types.h>& ~5 n. i1 p3 h/ w
#include <asm/mach/arch.h>
5 V3 D  v, P& K  x$ c/ H; y#include <mach/da8xx.h>
# k) g- l1 e( x. c# s1 M#define  SYSCFG_BASE   0x01c14000) i9 C3 l' M! K
#define  PINMUX1_OFFSET   0x124
' j( C8 c1 N, ]" ~* H#define  PINMUX18_OFFSET  0x168 ' O* D# C+ f5 c3 a% @# z
#define  PINMUX19_OFFSET  0x16c
% Q  ]4 I! I. n; E8 j( w#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR  L) |' J* \$ k: f" {9 g4 W  H& v
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR& t6 `- t; X% p% X6 N
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
4 V$ C7 n& ^7 X8 m) v) \#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR( i/ O9 H$ A+ m
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR- u9 Y: ^; L) }  i8 l
                           
& t1 z/ f& ?9 i0 q; p#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
& x6 Y- F  t4 B#define DRR_ADDR      0x01D11000  //MCBSP1_DRR( T9 ~6 v$ o3 ?+ O# F* d, C7 g& b
//PSC  R! n; T) ~6 u2 l
#define  PTCMD_ADDR   0x01E27120  " k& a! g/ l6 n& m
#define  MDCTL15_ADDR 0x01E27A3C2 @- \; q' S' c4 v6 {4 ~+ ^+ P
#define  PDCTL1_ADDR  0x01E273046 t6 e% [7 }7 h# `2 v
//GPIO8 direction
+ F3 r6 t8 h$ r" x% f#define GPIO8_DIRECT  0x01E260B0
- n( ?; h# R* c) L#define GPIO8_OUT     0x01E260B4
2 o- O9 s/ [1 G) S2 P- ]#define GPIO8_IN     0x01E260C0
0 M% P% i6 L0 J5 @& ]) i0 K  l4 w8 V4 G6 a
//#define MCBSP1_RINT    99              & C6 B% Y+ U2 Z/ g: T
//#define MCBSP1_XINT    100  8 T7 i$ o. g3 f2 Q, F* `& c2 P% N
static int MCBSP_MAJOR=239;! @7 Q. [( x: a/ R3 w
static int MCBSP_MINOR=0;
" l" U1 S$ Z" j7 j  Nstatic int count =1;
: l; D. l; r- X; [) Y
5 Z/ @7 f, H8 k5 C" J! Z#define MCBSP_NAME  "MCBSP-device"
) n3 x! k; ^2 g! k3 C3 ?! M
$ v% I' v+ Q' t" J3 A3 ~! R! ^# Qstatic struct cdev *mcbsp_cdev;
/ O2 u; a" k9 Kstatic struct class *mcbsp_class;5 u9 F) |" k  n8 n' O- |) t9 o. I
static dev_t mcbsp_dev;. D+ X4 }& v  \4 X, s3 ]
unsigned int DRR_data;
& R& u% K. ^1 w! [- [unsigned int DXR_data;6 n4 m) S6 x( B- @: R: Z7 p
static int mcbsp_open(struct inode *inode,struct file *file)
" \8 U9 i* i9 S{* ~& [: M8 _! ~4 G
   
6 m4 k; Q6 R% U# J! }   //interrupt enable,initialized
: S/ m) p4 Y7 A& I/ J2 d. A   unsigned int temp;4 H5 ~, u* y* y8 p- u& E( L) F
   //SLEEP_EN(GPIO8[10])---0
4 [5 n- I9 `2 \( E8 z2 e6 A) k* @   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
( a/ n' J- V2 @- j. ?   temp=temp&(~0x00000400);
: N4 j4 v( r4 Q- X: C/ V9 o4 v   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
. ^, s# P8 [7 v) ?% l/ L  //RESETn(GPIO8[8])----0----19 P( N) i, d8 N$ \. k4 W
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
8 M8 R8 a! c: o% U8 X! l* r# {   temp=temp&(~0x00000100);0 U: H9 `8 X* I) T
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0( R$ B8 H. x( }& ~1 r0 E
   udelay(100);9 V5 G$ ?( \- A% H/ x: i
   temp=temp| 0x00000100;
2 w  b# ?7 y8 f4 [   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---14 D1 w3 T# [! [$ R
   udelay(100);
& K2 i1 _6 j+ Z, E4 \0 [+ L   printk("open success!\n");
9 B: @' M% z4 v! ^   return 0;
3 o8 w6 o: D+ I) r3 {! l}2 C; c% N7 \3 S! [& l5 P

% l/ G  v8 I# C3 n4 y. `; Pstatic int mcbsp_release(struct inode *inode,struct file *file)
1 P9 I# m0 G/ g{' T. b2 A  t2 e# F4 P. i" L) e
   printk("release success!\n");, p) U7 Q, `* X) D
   return 0;
4 g- Z) `' R& C) [2 K! D5 }* o}0 {1 I1 P3 [5 ^( ?0 x% ~/ c
! I% ]  p! i' S  @
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)5 L& x% d0 }6 u; n
{3 t$ j6 H7 ?0 q3 A6 Q% w
    copy_from_user(&DXR_data,buf,len);
: d4 P6 }7 O& p  _    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
6 U+ z! B5 m# F    return 0;3 S/ _. j& O( }

- Q# ^7 F) ]6 d2 `: B7 I: p}
- H- v: V9 ^& a3 [: x, Y
1 O; R# Y, R! ?7 M$ B* [static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)2 j4 ~7 R' J$ T0 U) N, f
{ - F( [& f5 M# J. s8 }! b
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));; l6 A& ?+ @) z. m0 T5 x
   copy_to_user(buf,&DRR_data,len); ' q! o' D7 q0 e3 a8 {$ t& _9 [
   return 0;
( \& p2 Y4 G" X# d}7 J7 q) W# ]7 U# q; U

4 [0 w5 Y/ e- v7 c- C3 `8 B5 j, ~  n6 [1 h+ b/ p! B$ K) v5 t
static struct  file_operations mcbsp_fops=
5 v$ W5 h4 q4 I, D! Q{' H. _2 j2 B4 Q
   .owner=THIS_MODULE,- g9 T1 w$ t, n7 K
   .open=mcbsp_open,: }: N( c! Q& }, n' C
   .release=mcbsp_release,* x1 ]1 {* T( H. t7 p
   .write=mcbsp_write,1 n5 d2 w1 {+ ^0 Z1 C0 a
   .read=mcbsp_read,0 S* P+ q& Z5 i) G8 p- x$ x
};
0 y' @3 X# O  I6 O* Y" U& K- l% mstatic int __init MCBSP_init(void)9 C# R2 G7 u0 Q$ g% g. F
{1 e5 i: v5 z9 P5 z- e+ b! A
   int ret;
1 J/ z( p- Y$ ?5 p0 V' r+ D3 I6 ?7 d   unsigned  int   PINMUX1_REG_old;
  k% a" f( g7 Z: J5 j! z   unsigned  int   PINMUX18_REG_old;
5 I+ \0 \4 B2 A/ m5 Z& w" r   unsigned  int   PINMUX19_REG_old;
4 ^& c9 I$ M4 O6 o9 q   unsigned  int   temp;  
2 v/ H& q! x: X9 l+ u, `9 k  _   if(MCBSP_MAJOR); s3 I9 i( |. {6 j# n! Z: b2 k
   {
+ L; @5 ?" ]+ G# B+ L+ H# H      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);4 h! e" a* o5 @; s- z
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);8 ~0 o2 G6 y6 D9 M/ k. ]
   }4 f& _0 u3 T2 Y* U
   else
5 g3 {" H9 ?" D7 ~( N" N& G7 U   {( U- E) e$ G" G
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
2 t' l( Y) J7 t* H; [0 R) c      MCBSP_MAJOR=MAJOR(mcbsp_dev);
. z# t# v7 [9 Q0 x6 u( j0 M   }! _6 S7 U7 D+ Q
   3 x* [+ s& {/ E, D" a/ y7 ?4 `
   if(ret<0)
  h: B" c& [" `4 W7 h$ e   {! B0 i& p; X) f" N2 L
      printk(KERN_ERR "register chrdev fail!");4 |2 {. y; H7 P. Y% a5 l! i
      return -1;
  Y  a" c# a4 j   }
3 O" y3 ^0 T! r& o   2 d  c7 R3 g: Q! L
   mcbsp_cdev=cdev_alloc();1 P9 b' ?0 Z; e& t9 y1 }5 C
   + \; \- c2 a, Q( O8 _; J0 E' x1 g3 Q
   if(mcbsp_cdev!=NULL)
# n! A3 t  g0 u5 R! [: l   {: {/ |! f# F! C. `4 \" b7 I5 |4 H# i
      cdev_init(mcbsp_cdev,&mcbsp_fops);
' v/ a. y1 l2 j/ l0 r      mcbsp_cdev->ops=&mcbsp_fops;
& H8 f, s+ K& Z      mcbsp_cdev->owner=THIS_MODULE;
6 }0 O4 s8 a/ h. k4 Z      
' `- I  s$ @) J8 ]6 J5 j      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))' ?3 B+ s$ k0 r9 e
          printk(KERN_ERR "register cdev fail!");
6 Y/ ?6 y, m  t7 Z3 O! R& w7 s      else7 P& C, U' m3 Z; }4 }) B
          printk(KERN_ERR "register success!\n");
/ w; g3 P2 y9 K) J3 l) ~( l; Q& X+ L   }
- ~% O) C1 \/ T: z; Q  O   else
6 u" k5 V; k. j   {
9 w* q# {8 Z8 {% h$ Z- Y      printk(KERN_ERR "register cdev err!");" u* X) l9 P) w: L2 Z& k1 h6 \
      return -1;
( M0 V0 V5 J; C2 u8 p* A* a( ^   }+ t: d) X& P5 G
   & h% }- V0 M! h/ A) Z' S) x
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);4 d( h; E! i0 U; e5 y
   if(IS_ERR(mcbsp_class))9 J1 l6 h( l. D7 J
   {+ g/ |% X1 j; b8 ~5 N. b$ }
      printk(KERN_ERR "register class err!");
' T$ c# B* s" j   return -1;9 j( K! i1 `: u+ ~) N
   }, G, Q( K6 ~( @# u) Q
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
0 U/ y3 ^1 B( e; i, w6 G: c$ N# m/ G; C' ~# y) z
   //PSC
: @& [1 a- o: y7 X* {- j   //add Enable MCBSP: i# \3 a8 K1 o9 S
   //test
* [# b2 ?) ~$ A; D, e- j   temp = 0x80000003;
0 |! e! ]: f% |0 b6 E! u  ^   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
* x( A. J- n! D; k4 p   temp = 0x00000003;
5 a7 U' U3 x3 B   writel(temp, IO_ADDRESS(PTCMD_ADDR));  U# s* c  ^! B$ D  Z
+ }4 N, p3 H4 z
   temp = 0x001FF201;
# W  S9 F6 {' x9 t   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
/ G8 K& Y8 y# O0 z, ^   
1 _* U9 A( J9 A   //PINMUX  - ]5 V4 a, y. ~1 Z
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
8 O4 W8 X' ~4 n- y5 A0 n   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
' W4 p8 R( B, ^8 B7 h8 w   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ! k: X8 o. d4 s5 Z- K! y4 H" O
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
( {& S8 s2 o& M% }8 M   
# B$ u# e! ~- V3 Y   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ X6 ]- i+ b, E# I' ^3 G! `   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
" }0 L- G4 G$ a0 v" U7 b* s& c   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
# H* F# h' M( c' P   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ^' `$ J& V2 O7 M

  a* Y3 s& s" u) t! t) D) J   //RESETn,L138_SHK2
, U- f" L$ y# T   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  - k, {" \8 Q8 ^, V! d
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
5 x2 g/ r! }( c3 p   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);4 A3 {% r9 I5 X- G* ^/ k% R( K# D3 s
+ ~8 R5 @& \. z# x" _8 C$ y
! O( u% t+ V" C- g. e7 y( q: B
  //SPCR Register/ ^5 E6 p+ Y: k
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset9 {- S$ l9 X9 K  I7 F! }
  temp = 0x03000000;//(DLB=0)
( r4 S' x* V3 x! O' |: N // temp = 0x03008000;//(DLB=1)2 d5 `. u- C% C
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
8 c/ c. }; e7 w5 c7 W3 t+ `* x  temp = readl(IO_ADDRESS(SPCR_ADDR));; q; v$ F" v1 Y* q( ^+ A9 ]
  printk("temp=%x\n",temp);
0 J7 R8 ]1 ?# @7 B! p4 Y1 v ) ~# d6 w. R4 @- s0 ^/ K, o0 T
   //PCR Register
1 w/ _1 `) y& `" K+ E   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
3 {' g4 o7 }1 ~# J- O& W  // temp = 0x00000F0F;  U: @) e9 k0 x' S  U4 h
  temp = 0x00000B0F;
! A& L: }6 k3 g( |+ t  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
$ c' d7 x' q/ k9 a, x6 O4 `8 I  temp = readl(IO_ADDRESS(PCR_ADDR));
$ R9 g: T) y- }* k; }  printk("temp=%x\n",temp);  - {& b; l8 Z- ~5 C2 f& \1 P
   //SRGR Register
4 d: W  R$ |2 `) W0 N& t" a   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11* U- p/ _5 s+ q. f8 m3 i3 c
//temp = 0x301F000B;7 j2 I7 i. I, w1 g0 q# i
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
1 b4 ?# j* S2 {( P$ M0 }  temp = readl(IO_ADDRESS(SRGR_ADDR));! ?+ _& Y0 T3 n4 n9 j) Z- ]( }
  printk("temp=%x\n",temp);
% ]  }! `8 I+ _3 z+ W, c   //RCR
+ X# [1 f+ P8 U) q6 I' j0 G% J, g   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
! U) ?; w* K" }: n. M- J# h% c# h   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
  B$ T* l" e) u1 a$ C" N0 }   temp = 0x00440040;
, E' T1 p; \3 D$ o% ^$ C. g   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   8 A" O) B: G" x7 U
   temp = readl(IO_ADDRESS(RCR_ADDR));
7 t9 m$ X6 k/ Y   printk("temp=%x\n",temp);5 ]8 Q. D1 x2 j: M: O
   //XCR2 n$ i) d0 K/ V
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1; N5 E9 h& c# T9 s" c; a2 H6 o7 ^$ w/ x
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0) V7 g% p7 q( ~7 P3 T( j$ Z) y; r
   temp = 0x00440040;- i4 C2 J/ N( C' m5 z! X/ _# k
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   " V) t8 P" w! Z- }, C
   temp = readl(IO_ADDRESS(XCR_ADDR));, [: J% B4 c# j5 a( |9 M
   printk("temp=%x\n",temp);% I( R8 Y5 G0 t4 ?
  udelay(100);
# G8 N! H- K+ h  //SPCR Register( U5 H/ i# A) Q1 Y: `
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
% C9 n. G" k5 P' W  temp = 0x03C10001;   //DLB = 0 VS DLB = 1. f7 h' w) [3 {1 z& t
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled0 m0 M, X$ r6 E% R/ H( X$ a
  temp = readl(IO_ADDRESS(SPCR_ADDR));% R" s+ p! Z: P/ r" X! Y
  printk("temp=%x\n",temp);
$ a. \3 f  f% u  udelay(100);1 ~; d4 \, F! q4 h4 Z" e6 s/ l
6 q, ?3 A! r4 E2 s7 L
  //set GPIO direction/ ~& D: C' v: |+ d+ G
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));  c& ?1 U) a( r
   temp = temp | 0x00000100;//EPR----input4 }2 L) }# f8 a2 t2 H! u- P% j
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output- Z9 V) u$ ^% ~% P0 n
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ( a8 k/ C3 F2 f  K$ z

7 P5 z+ ?2 ?4 z   return 0;5 ^1 _5 m- h" a9 D
}) _! v+ x8 P4 E
static void __exit MCBSP_exit(void)
- w+ o: M1 q) s{% @5 [( x. F6 s' q# B/ G
   printk("mcbsp chrdev exit!\n");; e8 x6 o% e! K  v
   cdev_del(mcbsp_cdev);; J2 R& w. N8 w6 P' K4 I
   unregister_chrdev_region(mcbsp_dev,count);- E& t  B! w: _- I# ^2 h
   device_destroy(mcbsp_class,mcbsp_dev);
# c( k4 ~) r* }' G2 ^( S1 W) r, B   class_destroy(mcbsp_class);8 I* Q( x2 l, Y% a
}
% L% A' e. N6 F% y: u7 v/ }8 @module_init(MCBSP_init);: x) W& G9 {5 ~& b
module_exit(MCBSP_exit);3 c: F. f2 S1 T

% J" b1 o$ s1 x* I4 YMODULE_LICENSE("GPL");
" @* H9 v8 w& M; F8 x5 |* a- V& o/ v; @- ?6 C
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
  |3 Z# Y: i: K0 m. Z我的应用层的测试程序如下
4 K5 w& x8 l5 E' m- @( Y$ Q5 i#include <stdio.h>
- f0 K1 s5 @; i# s- ?+ i& i#include <string.h>
' w) k2 _9 W% e#include <fcntl.h>/ K) j$ J$ H. E
#include <unistd.h>: u" i3 S/ h# @& Q
#include <signal.h>9 R7 f% F/ M- n* E
#include <pthread.h>       //线程# w6 k3 Q. C* ]% o9 g
#include <stdlib.h>% u' o/ j, `7 `& W  g* i0 I" _! z
#include <pcap.h>          //捕获网口数据
5 F* k) M1 M# V#include <semaphore.h>     //信号
( J7 j  e7 h' M& R3 d$ x0 W! E) Y#include <sys/types.h>     //消息对列
% g( J& g! e1 d8 \#include <sys/ipc.h>       //消息队列
- c( [1 a4 {, K/ X7 _+ R: x& B* N#include <sys/msg.h>       //消息队列! s; B& P% Q3 k& z( F% q
#include <sys/select.h>/ y0 o) ~! u8 _
#include <sys/syscall.h>; a2 n7 d; g; p2 }
#include <sys/stat.h>" y- e8 H1 t1 x. ?2 d* L/ J8 d' [) ^
#include <sys/mman.h>/ d- Y; s7 _. l, q
#define msleep(x) usleep(1000*x)
  H: c5 A/ N6 U& w8 [* P; w. e9 p2 d3 `! y( Q& I
int main()5 e  l5 F: J1 i2 U8 t4 o
{
( i7 Z6 T( w) a1 }  j( n! A    //MCBSP,ARM与AMBE2000交互设备+ {: K: ^! I7 D2 l5 m
int fd;
1 P3 W+ l; ~2 M- ^8 E+ r$ r unsigned short data_write = 0x5555;
+ S  [/ E5 T  v7 a- A0 ^) J unsigned short data_read = 0x00;6 ?: s* J' y1 w  O% @
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);  J8 l* T2 s  J$ y/ V
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
' m/ F2 t  E4 Z9 P- B    + ^* N1 H: ?  v( v) @! X/ F
  if(fd < 0)
8 u( ~; F7 r* E6 }# ?% q- E% V( Y  {
8 m8 m; _3 Z4 n: r     perror("open failed\n");: G( j/ R' _7 e$ h4 B) L
     return -1;9 p* S; D4 v% [* n( t3 |
  }" l" |+ l' j+ d7 t: T3 G
  
  N$ K& W  T7 R" d- f9 t, j6 T  while(1)  T1 N/ c5 q0 f- t% W0 k% \
  {
( n8 _# o2 {6 ]- x# M   
# L8 W* j% X8 p0 L- j+ V' M   //AMBE2000每次读写是24个字为一帧, b* j4 t0 b9 o% a
   //写数据时将数据在底层存储起来,等到中断的时候再发送  e( u7 y& S! Z
   //AMBE2000输入数据是以0x13EC开头的9 f. w4 ^/ V! d0 K! o% b/ e
   write(fd,&data_write,sizeof(unsigned short));, ]$ Z6 V$ Y. x2 k3 [8 w1 @
   
/ F3 x2 f) _# l- Y) r! |   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
( c  c4 V* V0 t9 s1 l   read(fd,&data_read,sizeof(unsigned short));
4 h4 d' }5 h+ l. R' Z  F4 Q! R3 A   - d3 c! J; z% D& j! }: m
   if(data_read == 0x13Ec)- H4 u: p+ ^3 N
   {7 W& O2 R7 a$ r0 e- m
   ( D6 g& X* W+ @* |8 G" `
    printf("data_read = %x\n",data_read);. w/ }' H! @; F  Q4 k
   }" m) S! D& u4 o8 ]: d- Y
   
# n0 u; d7 _: L  Q& V   msleep(10);$ B! _0 Z1 S; _& D: N1 t# _
  
, w7 _  L3 d# R- ?4 q0 l  /*; c4 s7 e0 y/ Q  m! O8 d
   ioctl(fd,1);   & I9 v: r" x9 B0 t
sleep(1);; G+ X0 G/ Z2 x1 V2 d; [
ioctl(fd,0);5 o) W* I1 _7 a( T
sleep(1);: {+ X1 G0 y7 g# H6 S" ?
*/
1 K2 P1 X) K) D4 u& q' D& }  }   - Y0 @- k% f0 e' I* R& j& R
return 0;' q1 P' M6 D1 g- Q1 T8 m/ I6 b& T% @

& j) Q, _$ R$ Q# a}
% s, C% H0 F$ B* `9 x
2 B1 b# g0 b& |' H多谢各位指教,谢谢! 急
: R! W& k/ a$ d: L
( d0 c: f% \# s" i* N1 h6 R' v& y7 Y+ \7 h  ]  r8 [' y. f" g
0 M  M) V) G+ H

7 n" O5 a6 x1 E" m) i1 e! A* w6 N* L) k/ K# a; r8 g4 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 14:25 , Processed in 0.040210 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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