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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
3 E( ], a( b1 r1 X/*
& H7 `% f( J, Q9 F6 y * Copyright (C) 2009 Texas Instruments Inc
) v" b1 i4 _$ [  _ *
4 v( p+ S5 @# F$ N * This program is free software; you can redistribute it and/or modify! _3 R  W3 b! ?' Q: c
* it under the terms of the GNU General Public License as published by
" b$ |2 Z# L/ m5 M * the Free Software Foundation; either version 2 of the License, or
5 K1 }2 `4 ~, j; s( _6 K$ Q * (at your option)any later version., O4 Z% H, C& a  B
*
0 P# ~6 S+ c' ?1 z/ U2 w * This program is distributed in the hope that it will be useful,
2 v& S3 j$ D/ n; d: m * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ z% y# m- [0 h! q1 o * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) L2 J% h  F8 B  _7 S+ x, V- | * GNU General Public License for more details.8 y7 B9 S3 a6 b& K( w
*% `) g' j9 p9 R8 \
* You should have received a copy of the GNU General Public License
  }/ s, S6 m' d8 ^5 A: q# @ * along with this program; if not, write to the Free Software
" @1 [; b% C! }; i$ W1 o * Foundati' r' I; @1 @% _2 z7 _  I& n+ x
*/4 \2 D9 f; x. g2 @
#include <linux/module.h>5 ]1 Z" }0 a$ W" i- l
#include <linux/init.h>
" g& r3 Y$ @# l, ?! Q4 l9 C* q#include <linux/errno.h>
/ Y7 n& H. J' ]- E9 e- ?#include <linux/types.h>
) z4 U8 C7 ~, R6 o! J#include <linux/interrupt.h>" |% A* y' K3 N  ?+ f2 k
#include <linux/io.h>
/ U/ c4 y4 J! P5 I9 `- Q#include <linux/sysctl.h>
$ ?" K' D& \3 N2 d( i#include <linux/mm.h>
0 b/ K0 m. u& ~# t& r# q#include <linux/delay.h>
+ r/ S; ]! @8 M, f4 l) w#include<linux/kernel.h>' t/ \( l: F5 f
#include<linux/fs.h>
( j4 [+ _6 P3 L2 {#include<linux/ioctl.h>6 t) |: R3 |7 t& P6 M# r+ b# U
#include<linux/cdev.h>
% ]& B: F# M! a; U& y9 q#include<linux/kdev_t.h>
  t2 A* ?* S4 U1 q4 K* S, q#include<linux/gpio.h>
5 v, O. p% n9 G& x1 s+ f2 M# G  _#include <mach/hardware.h>" u7 A3 k4 W1 |! \0 h
#include <mach/irqs.h>
' N6 Y+ ?/ z) C2 K+ y
! M) m. L1 p  P#include <asm/mach-types.h>' q* j% p- l: ^
#include <asm/mach/arch.h>: X: m9 p4 e6 n5 G6 D4 P
#include <mach/da8xx.h>
! d3 F  q8 ]7 R& I; g, v#define  SYSCFG_BASE   0x01c14000
  s. o/ i. t. A) q/ g#define  PINMUX1_OFFSET   0x124 5 a; c1 s3 x, R; V
#define  PINMUX18_OFFSET  0x168
9 e+ G- o9 |* ?% v#define  PINMUX19_OFFSET  0x16c, q7 c* [- G+ {7 y. h; _3 Z
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
( J- r2 _4 y1 _$ {  t$ g#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
" v# S- d# C. J# X5 k" y#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
4 o. F, b5 M1 W5 b3 c#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
1 \- Q8 a$ q. W% ^#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
3 j7 ^+ U: Q4 e' D. M! t0 H                           
7 |- `7 m  j  Y' Y; q#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
( P6 M( _: [1 K9 w+ v! F* p/ ?#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
8 J' @. f# N7 Z* a0 ?//PSC
! I7 @& g$ c" b#define  PTCMD_ADDR   0x01E27120  
+ n) {% [2 ^( t5 |7 @$ ~! y9 O# i#define  MDCTL15_ADDR 0x01E27A3C
4 ^$ n8 D( ^2 K; u& q! a8 Z/ ^#define  PDCTL1_ADDR  0x01E27304
2 }# q, m( \5 n% M//GPIO8 direction1 P; S: G, r5 b/ \3 W& [
#define GPIO8_DIRECT  0x01E260B0
1 K* L9 i+ i7 {# e#define GPIO8_OUT     0x01E260B4
7 C( d0 t1 t' b* G- w0 O#define GPIO8_IN     0x01E260C0# ]; i- ^2 k- g; ~4 y0 ^
7 a& B9 M+ O7 u3 W
//#define MCBSP1_RINT    99              & M8 H( O" @. j  _' M
//#define MCBSP1_XINT    100  
5 v& B2 x4 l9 D0 fstatic int MCBSP_MAJOR=239;9 N7 T* l3 ]  L$ S
static int MCBSP_MINOR=0;% w8 B5 v: {- ~2 \8 T
static int count =1;8 |( v( N1 }# ?6 ?
0 r, w  h) w/ I- V
#define MCBSP_NAME  "MCBSP-device"2 O* j7 N7 T0 @4 F. O4 }

5 G2 T' [! @+ z9 K( b) u' Ustatic struct cdev *mcbsp_cdev;3 R. X( ^& O# v; F
static struct class *mcbsp_class;
8 s1 A+ g3 [" w# H* {static dev_t mcbsp_dev;
, i$ K) {5 ^* l. ?& d- ~unsigned int DRR_data;
2 G5 U, ~, S+ |  l8 H0 F" Nunsigned int DXR_data;
& P9 j3 A# r* X) j( M( m" U7 k, |static int mcbsp_open(struct inode *inode,struct file *file)
  t2 `6 b' a* Y! Y+ a+ R5 G{
. t# ^, f1 C. L! i2 o: G0 l/ }* L   . Z. Z. L' O( ]7 ^+ ?3 W& s
   //interrupt enable,initialized
9 X' |8 w0 s5 X3 t% u0 x/ B   unsigned int temp;
* L) P' j2 W& n, f/ a  n   //SLEEP_EN(GPIO8[10])---0
2 L! z8 [& {: b# e/ T   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));6 F+ h& z3 |% V2 W2 h- ?5 g9 e
   temp=temp&(~0x00000400);
+ |! C- V1 F* }$ {/ U   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
7 \" y8 A* C8 t, p/ @$ a+ p; e  //RESETn(GPIO8[8])----0----1
( R3 C, _9 C* H0 X   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));3 ~8 n% _7 d* |+ ?
   temp=temp&(~0x00000100);* O9 N/ P3 S; h5 f1 c' t
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0, N5 P3 |, ^; M
   udelay(100);
/ G0 e/ a. d8 D* A5 J5 }# |   temp=temp| 0x00000100;
; C8 }! Y. {/ u; t  m: C   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
) a9 G/ q/ q& W2 M   udelay(100);
( A5 @9 v2 ^* d" R) I) o5 U   printk("open success!\n");
3 x- V; L( _# f1 i! I   return 0;5 [- W4 s3 ^" k
}/ d9 F. c+ d/ Z
& S! ?( _$ S$ \5 z6 q! |$ s) i
static int mcbsp_release(struct inode *inode,struct file *file)
; b; e& S2 v6 b( S. \( t$ N{
. M9 e7 B% K4 o2 s/ R4 b$ V   printk("release success!\n");( m0 Q4 U! G1 Q7 k; y
   return 0;- t1 q+ L4 R( _1 q% r, M
}
+ a2 O" o3 b1 ^9 P. u8 I, C# _
7 a. K; X  z$ [' ^) ^static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
  C, [- A' T; g{
, w# ?, s' p2 {    copy_from_user(&DXR_data,buf,len);. c! l3 a. U% N# C2 @1 Q
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
  i; Y3 K, L+ l    return 0;) {+ C8 |+ C$ V8 n
6 ]$ D9 I$ r& \# p0 G5 A
}! {% p* p8 h2 y5 N( m
4 l! t0 D( {6 o6 f+ k
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
( a, ?9 K  }0 F{
. g( m9 L1 `- w/ \' Y2 O- c   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
# p* i) d" s2 P% v7 V1 Y9 x& s5 K1 C   copy_to_user(buf,&DRR_data,len); - m" k, J& O, n% m/ H/ u8 H& S  e; z
   return 0;* e; |1 @4 s5 X/ X
}# O$ ~1 h# W) N$ t7 B

& s  M  t* g& _. d) I
, ?8 z$ ]9 {: K0 l, d* zstatic struct  file_operations mcbsp_fops=
( T4 s7 i' R8 W1 J$ y! o9 ?) z{( B9 \1 R0 u$ \: k
   .owner=THIS_MODULE,
, \  y0 P: o8 B# c# p; y   .open=mcbsp_open,1 I" u8 t# }3 [* r4 f9 O' R0 \8 B
   .release=mcbsp_release,+ H+ T# i/ A( B9 }1 t4 I
   .write=mcbsp_write,
/ M) {& w4 @! K   .read=mcbsp_read,
) L6 L, A4 l7 Y( e) W" m2 ?};* z0 p. I0 e) V1 z& O
static int __init MCBSP_init(void)
& ?- f( M. S: O$ [+ P+ c{' |5 P, ^2 ~: a+ x) _
   int ret;6 `0 u" f; J' f! F
   unsigned  int   PINMUX1_REG_old;1 k" q. B  F2 |% n. I, M& c
   unsigned  int   PINMUX18_REG_old;
0 E4 A# l* U! R0 I! K6 _% P. ]   unsigned  int   PINMUX19_REG_old;
  o5 J9 T: p( V+ X4 Z  O4 n   unsigned  int   temp;  
: [2 P" {+ a( v7 R" g& f   if(MCBSP_MAJOR)
' R% o! Q4 ^# K& W+ l" |  `0 R   {
9 q6 Q$ r. C1 L# x! o% P      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);1 Z/ U) }6 J+ D8 F0 w
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
  i4 S5 C$ k" w& h" n% E   }4 a. ^* S* X$ z" x  n9 w  T; V: B+ X- d
   else
, F- _; |/ q/ h- w   {
* a: t( a8 n' ?# |5 [; }      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);( j0 F* K3 a/ B
      MCBSP_MAJOR=MAJOR(mcbsp_dev);$ e" M, w+ ?; c+ {1 g
   }1 f  y7 }' m5 B% x/ i! i
   
3 [: Z8 w8 Z! _( S   if(ret<0)) K" ?! r# ]8 F+ I
   {
8 h+ _/ k. t8 a/ ^      printk(KERN_ERR "register chrdev fail!");4 _; e, x1 E3 q$ p- }  f0 k! Z! l
      return -1;
) ~" Y& n, ]6 P- Z   }6 Z, e2 G  Z$ O+ Q
   # M' N3 F2 E) y2 K- |# {( r
   mcbsp_cdev=cdev_alloc();
- y, ~% J& t3 t6 ]: F0 F   7 i: @  y' b" V
   if(mcbsp_cdev!=NULL)8 [# k: g% V2 h5 s
   {
: u. A1 p4 j% q( J% f/ _9 G% v      cdev_init(mcbsp_cdev,&mcbsp_fops);
/ |  u5 }2 G, a# g: B. ?* ^0 G      mcbsp_cdev->ops=&mcbsp_fops;
2 A" J2 {4 r$ h; h  {4 C      mcbsp_cdev->owner=THIS_MODULE;
* `5 J2 I' g3 s# F/ P* C2 B/ T      
; L; m* ]3 Q* W  j      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
6 T. @0 o% R+ j( h. e3 \/ G          printk(KERN_ERR "register cdev fail!");1 |6 C2 F, @1 `6 q+ B0 M0 ?5 U9 A
      else
+ G- w5 E( n5 ^+ f+ a          printk(KERN_ERR "register success!\n");8 ?( l; q1 }7 A5 y7 m3 H
   }2 S6 A+ D# F8 u( e' O3 m4 K
   else
& L0 p' _- f7 l' q6 }$ a. Q: L' F   {
* q9 N' X$ X0 x* z6 w6 ]      printk(KERN_ERR "register cdev err!");
* q* c* ^# y% k      return -1;
0 Q* u: h; ^6 N   }& e* R/ g! q4 Z. s1 e8 v: U- \
   
4 {; G% j7 @( L4 `1 L' m  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
5 E' g; U  Q* C, c; Q3 g   if(IS_ERR(mcbsp_class))
/ ~& u7 o! f+ x   {- D( N7 q  w1 `" w! ?! _4 [
      printk(KERN_ERR "register class err!");; f/ l9 J6 P1 X$ Q  o2 r& k+ G2 _
   return -1;6 n1 B7 ]7 u) `) i/ j4 w* b3 H7 O
   }$ I$ X3 K2 H) [- a: K; B3 [) L, o
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);8 Y# T- U* Z3 a( a4 g5 e/ K

* W- Z% n, y: C: p   //PSC
: e, f: y5 n0 O) S   //add Enable MCBSP$ @$ }0 W; p" n8 c6 O2 M/ s
   //test: @3 C4 q8 Z( O& k& n1 t5 h' w
   temp = 0x80000003;$ N$ u+ _) h  Q
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
% P' g! E) |1 }. `+ C( s' x! a4 l   temp = 0x00000003;+ M& o- m4 a/ o/ U
   writel(temp, IO_ADDRESS(PTCMD_ADDR));8 g8 C+ z+ E9 _' f. F9 }
# x1 M. R9 T# U% k
   temp = 0x001FF201;0 l  @( J7 L- ?& I
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));* s0 S1 o/ M  s2 B2 i9 X
   1 d0 d5 s( S! I
   //PINMUX  
3 q$ `- F/ ]$ M6 P9 C   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,( I/ K4 l# A  _* }- ~
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
1 _! e( `0 Y1 Z# I9 S$ h   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   # ~& S- s/ o3 }% M5 Z' X4 H" d& i
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
/ }1 b5 a* T) ~( U7 ?   
6 P# `+ o& @& s% W1 [1 [) n7 s2 j   //SLEEP_EN,EPR,L138_SHK1,L138_RC
; t. W6 p& Y2 n   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
- C0 d/ ~) N/ I8 h" K7 X3 T   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   $ ~8 R7 |3 p9 `9 c& h
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);: r$ P/ d7 L( W

7 O# J0 S9 X# F* z   //RESETn,L138_SHK2
/ d/ m3 \; S. C1 F   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
7 W' r# y( l5 Z) a1 M9 X* w% [   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   2 V( d/ [) M7 F+ h: G9 \" q
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
  {) h0 J) H4 ?" W
' x& D$ z% Q! x3 Y5 ?7 {, K. b ' w7 Z! f* O, u( f: u
  //SPCR Register
6 i* B/ A! z0 t/ S* A2 O  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
$ y# W/ j3 O& n' f6 o  temp = 0x03000000;//(DLB=0)
+ G# b- I7 ]4 P" b+ J // temp = 0x03008000;//(DLB=1)
; G) r1 }  j3 M- H' T  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
4 l: E) H. Q) Z0 N  temp = readl(IO_ADDRESS(SPCR_ADDR));$ L7 T* G. {# a# H) f* x
  printk("temp=%x\n",temp);
! o! A8 v3 @- m- _
' w3 V& ^; s  G7 U+ @   //PCR Register
* c2 W, K6 |7 P$ ~+ V5 g/ O1 D   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
' e- [  Q. a6 L- Y' l  // temp = 0x00000F0F;
3 M( L5 a& {3 q/ ?2 z  U  temp = 0x00000B0F;
8 L+ r; j5 j6 s  {; Z) n- C2 ]# U  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 1 t/ d' H3 k% N5 ?" Q( k4 \
  temp = readl(IO_ADDRESS(PCR_ADDR));( a. A* a9 X+ }
  printk("temp=%x\n",temp);  5 e& L  k/ f; k6 i1 I
   //SRGR Register4 g8 X) W* B7 n5 y$ D; \" f# ^
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==115 i1 Q  Z6 |: Y* p$ O% m
//temp = 0x301F000B;
8 K& {! k! D+ C, f2 y7 X   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 5 Y5 }( l8 d2 R$ N
  temp = readl(IO_ADDRESS(SRGR_ADDR));$ U, w: A! K$ l9 e
  printk("temp=%x\n",temp);1 H- i4 n* a& i: {/ }
   //RCR
9 W3 o# Y. v  v  Z9 h5 K" y; @   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
+ n7 k( x8 C7 O   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0$ X; n4 ^8 e* g9 P% e
   temp = 0x00440040;
7 r. K( {3 @* Q* e# h   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   1 E+ i! p2 E2 R
   temp = readl(IO_ADDRESS(RCR_ADDR));8 @  w& Y) }+ k
   printk("temp=%x\n",temp);
7 P1 e, Z8 r  [" F+ [  e4 M; l   //XCR! x' I% W8 n" y
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
3 C: W" A# X7 B7 \$ E  Q+ T   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
+ \% w/ D4 H8 Z7 o   temp = 0x00440040;) H$ w' r) ^4 ~% L: M1 z( w- g
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   & O' ]% n8 j2 X: |, t, |
   temp = readl(IO_ADDRESS(XCR_ADDR));5 c9 Y+ T+ T) R
   printk("temp=%x\n",temp);4 C9 E% @, j* q" w$ [2 l
  udelay(100);/ p2 `9 L& ?7 B; n
  //SPCR Register
- @. r) R$ N2 u  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
- u; N6 V* [7 z7 |  \# ~. Q  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
( `% ?+ f, ?) e# D& e. k  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
7 C" h. f/ a9 S$ I9 v  temp = readl(IO_ADDRESS(SPCR_ADDR));& A" `8 a: Q3 N# e3 D
  printk("temp=%x\n",temp);/ U0 H+ t% Z" O4 m! w# d
  udelay(100);, z8 ?* }. U* Z

& R: e( k  T; K9 _# ?% I$ [+ u  //set GPIO direction. U# F3 g; a/ ~7 `% `% v
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));% T9 E$ i: o+ O- q
   temp = temp | 0x00000100;//EPR----input$ Y+ d1 {4 D& T1 M6 z6 u
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output* I# N( a9 A# L$ F0 A8 l% l
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
; w7 o6 V+ k7 \: d% _" W 8 t3 u% ~7 C  M7 m) }8 J9 [8 ]% F$ z0 A
   return 0;
( f+ E: q8 Y4 \6 E}0 e" H) @! B7 L9 B
static void __exit MCBSP_exit(void). Y8 ^( Q' {3 R7 C
{) r* r0 b, f3 |, y! d' @* e5 S
   printk("mcbsp chrdev exit!\n");
, k( e2 q8 o0 C$ `. f- d4 j   cdev_del(mcbsp_cdev);) ~( ~0 H) L; k) b5 |
   unregister_chrdev_region(mcbsp_dev,count);5 C4 q' J2 C% N5 [, @& O" M: Q
   device_destroy(mcbsp_class,mcbsp_dev);
( s! R! P' I5 D# c   class_destroy(mcbsp_class);
$ f1 L* ?0 D* n# ?# y, u}4 I/ v* T$ F6 D: W) z$ i, e$ P
module_init(MCBSP_init);
! S7 S2 I7 }* S3 j9 l' Mmodule_exit(MCBSP_exit);( z9 E* X1 |' T) Y$ M) {9 z
+ V( B* l7 y# f% b" D2 {
MODULE_LICENSE("GPL");) W' R: `( v" W9 r- ]2 N
* }4 a) ]. P. ^
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
. m- {. t) \3 f* W+ [! ^我的应用层的测试程序如下; h& n3 x  x! Y/ T( g8 v
#include <stdio.h>
4 P/ _7 z/ r; Y8 K#include <string.h>6 s6 P: Q; m* h! t! ^
#include <fcntl.h>- W1 F% |, d, x9 w
#include <unistd.h>
  N0 K, g$ }% e#include <signal.h>
7 k! ^  ?% J( {; O#include <pthread.h>       //线程
0 E2 L. X4 Z$ `, B5 }; {8 v" v#include <stdlib.h>
6 p% R2 i# G( y' _% `#include <pcap.h>          //捕获网口数据0 \8 D1 y) J0 }8 T' X+ e
#include <semaphore.h>     //信号
# ?6 P! s( N& O: Y#include <sys/types.h>     //消息对列
, B3 n6 b5 {9 J' P& k8 b, \9 \* b3 B#include <sys/ipc.h>       //消息队列( f1 O* \* o2 A4 [
#include <sys/msg.h>       //消息队列* ~. q1 ?/ }6 ^7 H+ l; r) a
#include <sys/select.h>
- p; o% m5 F2 s$ f4 [# f#include <sys/syscall.h>/ @# M0 W! k8 }
#include <sys/stat.h>4 z3 x$ z& ?( _" X8 ?2 I9 Z
#include <sys/mman.h>
. H# \% k* W) y  j#define msleep(x) usleep(1000*x)
9 q6 y/ \. ?0 L0 s. ]) R  P8 n. u& {' y! a* |0 X' f
int main()
+ p! q* |; c% d{
6 @3 R+ D. q; I    //MCBSP,ARM与AMBE2000交互设备
9 c0 [6 r; ?7 v% P( o+ I0 K int fd;; ~' q: l7 C8 t
unsigned short data_write = 0x5555;1 i  I: A. g5 i3 W' t8 `9 ?
unsigned short data_read = 0x00;
$ g& F* D9 P9 p0 L; v  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);) O5 s$ A# y* b  i
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
4 F/ |: e. N- H    $ a( g, A5 Y8 I& l; z/ ~
  if(fd < 0)
  J, a, Q& Q( {( T, K1 I  {& D/ ]3 ~! P; A" N  e2 c+ @
     perror("open failed\n");3 v( u+ `, u/ X0 O9 n" h" ^
     return -1;
. w$ Y* T9 Q9 k& \, a; k  P  }
/ U( y: T- A4 n# q  
9 k! a3 `/ K8 Y" w  while(1)
" X6 Q* h% b3 R: v  {7 I9 U' x$ E3 l2 {4 a
   
9 j9 X8 f7 l9 w- E# v' S' y8 M   //AMBE2000每次读写是24个字为一帧, \: B$ @. G6 r% I
   //写数据时将数据在底层存储起来,等到中断的时候再发送
; B, q* H6 G1 L   //AMBE2000输入数据是以0x13EC开头的
8 Y3 Y- ]* ]2 q   write(fd,&data_write,sizeof(unsigned short));3 s: g; d* U" u: h- D
   - @' i- k; B/ ^0 h9 H) k
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  ! V) e3 _3 C8 _' U( W  q
   read(fd,&data_read,sizeof(unsigned short));
' j4 G$ e1 b3 ~   
2 b4 f% Q5 g* Y6 W, Q   if(data_read == 0x13Ec)
+ r- [# z8 s, O: R' S  w   {
2 t+ O& M  v& P0 a$ t: B   9 q( x4 b  M3 f+ A
    printf("data_read = %x\n",data_read);6 i) d( e- R6 T* D
   }
: L3 T1 ]8 v. V, M4 I4 A/ @     D( Q$ J* P4 ]& p* ]
   msleep(10);
1 d3 x" E3 e- d9 N9 K, E4 C  Q- ]  
* J5 \/ A# w. H' Y  /*5 K9 L- y9 r: v# Z  e+ B' Q: b) s
   ioctl(fd,1);   
0 V, o/ |, ~8 H# P( J) Y2 E. W4 H sleep(1);
0 k) m% D* V1 f( u1 L9 ? ioctl(fd,0);: p: x. Z! e- c3 W2 h8 e3 q
sleep(1);
' f# ?2 C$ \& o( v; x! n */
8 ~2 P: A0 o; A+ T- L  }   & b" T$ n- {! p: c5 Y  v6 `. t
return 0;
" c8 d; G7 e( P# x; B; Q " \( ?- }. h8 d- u- `
}7 k4 ~7 y# l1 k, V8 H. r
, l) y+ e8 \- n  v* b. }5 m
多谢各位指教,谢谢! 急" E! d6 z, g: @  {" l% g! j

! |7 U* X) L$ L) \- p3 S; y2 x& e/ L# G! K' D
- r2 {7 i" ~! ^4 \* N
% ~& D1 }5 |+ a7 q. w

: H/ U* b( D- K# }9 y2 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 18:53 , Processed in 0.048127 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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