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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
* y3 w- C. V' Y( N" N! N/*
2 N( \1 I8 F5 A * Copyright (C) 2009 Texas Instruments Inc
9 q0 ?: E; l! P, L7 J# | *: X* E+ g# u) X8 N- j* Y; T& E
* This program is free software; you can redistribute it and/or modify
$ L: m9 T/ ]' ]5 J$ K7 G" D * it under the terms of the GNU General Public License as published by
2 j4 \* V7 q& L* R. k; D * the Free Software Foundation; either version 2 of the License, or, n8 S5 |. Q, q/ `7 r. ^3 `* J+ H  A4 |
* (at your option)any later version.  A6 |' N1 x' ]8 M3 l7 g/ F
*! ]; r# y( V5 M5 T( `
* This program is distributed in the hope that it will be useful,
! }9 v+ ?% f3 s1 P# u& ] * but WITHOUT ANY WARRANTY; without even the implied warranty of
0 P7 r, G  {. V1 k- m' r! g5 B * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ i* u& F# v/ T * GNU General Public License for more details.6 a* C# |: T; ?! J7 |# P
*
$ v/ H  O; ?$ v * You should have received a copy of the GNU General Public License' ^- n4 E- i2 K! h9 Q
* along with this program; if not, write to the Free Software
! G5 H2 [) p& ^% t, ^" }9 @6 i5 D * Foundati
1 \# q* v/ U- z7 V; c- K*/5 F! J# S0 W) \9 f) Y  K" r, n) z
#include <linux/module.h>& p  R5 k! q3 Y( W
#include <linux/init.h>- C! ]. P0 \7 b/ s
#include <linux/errno.h># |" n5 t; _' d
#include <linux/types.h>
0 E& g, a0 F6 D$ `. _% T) ]#include <linux/interrupt.h>
! f9 X% y* j- E1 K* Y" A% _#include <linux/io.h>
& l/ E' W  @) ^: t- X#include <linux/sysctl.h>3 V" [4 z( ^# ]
#include <linux/mm.h>
5 h+ g5 x" X% C( C#include <linux/delay.h>
! J+ G' C" R" s5 S; x#include<linux/kernel.h>
+ ~- G9 M  S6 K; |' c#include<linux/fs.h>
. c! O- H" H9 ?) h- G+ h#include<linux/ioctl.h>
; L( I4 E) V# t. v! ?8 p, a#include<linux/cdev.h>! c- x# Z9 y5 M6 M, S( @
#include<linux/kdev_t.h>1 A/ ~) W; Y8 t4 ]; z! r& M# X; S) N
#include<linux/gpio.h>
% |7 L) Y* |8 n2 p1 d  u- U% q#include <mach/hardware.h>8 i4 Q- Q% @0 J( L
#include <mach/irqs.h>
) S. R* A, p, l5 R/ F$ }2 d! U! G% T2 L7 [# d4 X  S! t
#include <asm/mach-types.h>0 i$ ~) ]) F$ o7 C) R
#include <asm/mach/arch.h>4 l6 @/ Q3 V' ?1 n' s- n* c
#include <mach/da8xx.h>
0 q. D% n6 G. ?& N6 y#define  SYSCFG_BASE   0x01c14000
& T; ?$ c) h" J; L' W#define  PINMUX1_OFFSET   0x124
5 b1 {# N/ e% l" l. k5 k$ N#define  PINMUX18_OFFSET  0x168 $ a& X0 K( K' j- F; ?. r
#define  PINMUX19_OFFSET  0x16c
! I' V9 {8 \0 _* l#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR& D, Q, B5 I" ]3 h: y5 c; Z6 B
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR* R. V1 O# {2 n7 |2 E
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR1 C: M. h$ t, {2 i& L" ]
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR% _9 m- B" [; ]: ^9 `
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
" Q4 A; z% W7 X; i                           
: k. _- S( `1 x9 }& Z#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
' u0 h$ H7 \, M5 L2 y#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
4 L) j4 I! `" V: r3 n1 Q//PSC% V! ~, a) e; d+ r3 d
#define  PTCMD_ADDR   0x01E27120  
3 n/ B& L) a/ V( s' I0 W% e#define  MDCTL15_ADDR 0x01E27A3C
4 G& W3 G) f3 w0 G) @#define  PDCTL1_ADDR  0x01E27304$ b4 r, v, H( m; l
//GPIO8 direction9 }6 R  c- y$ v9 }4 Z9 I. q
#define GPIO8_DIRECT  0x01E260B0
8 K7 F$ E4 E+ ?( t! z#define GPIO8_OUT     0x01E260B4
* [, V! P* a/ r+ e  t#define GPIO8_IN     0x01E260C0; T% q1 |7 E5 [; O* F' H6 O3 g

8 I- ?2 r" b- G& [' U, j//#define MCBSP1_RINT    99              
: ^- z  H# k' b5 s+ E//#define MCBSP1_XINT    100  
' b" l, {4 ?3 t1 @static int MCBSP_MAJOR=239;
3 w  z  T% a# ?' G* |. Bstatic int MCBSP_MINOR=0;
3 {* k& |0 @# h$ t& }4 estatic int count =1;
4 L* X9 |- }& U! R. F5 M
* F8 ]$ R7 k( x. m#define MCBSP_NAME  "MCBSP-device", t3 r: y: E, e7 Z& Y: ], \
: ^# F% T! m: q4 J6 w( Z  s
static struct cdev *mcbsp_cdev;
! f. N' @7 o9 Xstatic struct class *mcbsp_class;7 [( v* D9 n2 k  x# K3 q
static dev_t mcbsp_dev;5 `4 K- g) H/ m6 L7 ^4 k
unsigned int DRR_data;
: s5 y0 y7 |* b4 G6 Z. R9 q& r) punsigned int DXR_data;) _9 ~- r* }, B! r! r
static int mcbsp_open(struct inode *inode,struct file *file); C8 H: r9 L) \  z) @. B' u9 G
{& u& w4 J8 s, v& T0 E
   ; @6 I& F9 W* u, M
   //interrupt enable,initialized
9 m2 G7 r$ ?8 _! c# I  w0 n   unsigned int temp;
& @3 R8 N" r& n' ^, u# f   //SLEEP_EN(GPIO8[10])---0
2 e  o% T+ e; g; J7 ?* L; l   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
1 q3 v* B& t; s7 q# q% {4 q   temp=temp&(~0x00000400);" K, R. E% {& c8 J
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]5 L, m( X: d$ O" w7 M+ m
  //RESETn(GPIO8[8])----0----1
" y- f9 A; m! `/ `- |* O   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
. g" B2 n7 ^$ j   temp=temp&(~0x00000100);
$ r0 d% U9 T  }* a! T   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---09 @$ l6 K+ C5 m  Y% P( l& k
   udelay(100);( D" q$ ~+ c) O- X
   temp=temp| 0x00000100;
2 R+ M* c) ]- @8 _* Y4 U2 x   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1/ M2 k9 q2 _" I  J6 b
   udelay(100);
( i( b+ U, Y/ [7 l# i   printk("open success!\n");
" E! R% f7 j) U% q8 K( i   return 0;3 f' o. C; `' `) p9 B
}" |! p* V& D# @8 H( ~

  g# b9 v6 o& D% z% estatic int mcbsp_release(struct inode *inode,struct file *file)
2 W- d; x$ ^2 w8 P( x- p* Q{" u, J" t8 G8 x' |9 n% q
   printk("release success!\n");
% r$ |& E; W' B- S$ _: N& T" K   return 0;
, y( `+ |$ v: H2 B& B. f# I}, B. d% C: e. \, U

" d' i+ R4 b3 g9 f1 Xstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
7 H( d6 i1 y" I+ j, h( U: s" E{/ C& G, \. h1 X1 `0 G- a
    copy_from_user(&DXR_data,buf,len);
  A( h. Q! {8 ~1 l% w) w    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       4 i$ V5 r( T  n& T6 s
    return 0;& Z0 _# [$ a& n$ s) M6 ^
# u$ `/ K0 p) p, m3 k8 s% c
}
- j1 o( i/ U" ?$ a2 d! D# k
. Z2 _, M' C* T6 i8 G$ mstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)& c: t& C& q0 f( E) e. \
{   z6 \& n' N( t/ {3 p/ P0 e
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));6 R, u* i* K' ~' i
   copy_to_user(buf,&DRR_data,len);
) M! d$ [; K9 W% W" U: N1 `- s   return 0;
: Y7 Q% T. g( K( d. y7 q7 c" i}
  L; {& j# [5 L# w' G5 u0 Y
6 }- G: A) y6 S6 g( {0 O. z
, j2 }; e4 C7 {0 a- Hstatic struct  file_operations mcbsp_fops=
( Q( O( M# ]- q4 |# [/ D* \{
1 V9 y" i0 P' h   .owner=THIS_MODULE,
8 L! C* e6 w! q& ]   .open=mcbsp_open,
; }4 Y0 l) r0 I' B4 E& _) A5 T   .release=mcbsp_release,
# x. p: l* h$ x1 k  V% G7 @% }   .write=mcbsp_write,
5 q8 U9 ?1 O9 ^! R: W   .read=mcbsp_read,
) K0 K! @; U: q1 T0 ?+ W* U};7 N9 L% t1 _4 [- K$ i
static int __init MCBSP_init(void)4 g( j0 F0 e: F% e& _6 v3 t+ {
{0 o/ `+ U+ o2 m, R" J
   int ret;
" [- o% ^) H" o   unsigned  int   PINMUX1_REG_old;4 l6 ~! w! I! ]
   unsigned  int   PINMUX18_REG_old;
9 c+ N/ d- ~$ U6 Z1 U   unsigned  int   PINMUX19_REG_old;: s! M$ g% w# ]9 a; _$ r5 D
   unsigned  int   temp;  # @: G  H: e; N" A. m
   if(MCBSP_MAJOR)
0 z' W0 M8 F" _" [   {  ?+ |, S! M; T, `3 Y+ P
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);2 a# H1 @/ N! k2 I( S
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
1 V$ `& J4 e; r3 l2 m! \; `   }
1 V4 R2 K7 N, Y9 o0 Q4 O   else
: u2 t2 Y0 C( \4 h- N. v; C   {% z/ ^5 i1 R  N8 K; Q( m
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);' {: l) A) ]5 G) b# P5 v7 G9 C
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
: c3 T3 C* A, N& p+ Z9 F$ U   }# ~/ I2 U5 ^; x+ j# k" {
   , e; ~; _! `$ C7 M) U2 a4 @
   if(ret<0): r6 s; f. |' Q, h4 Q
   {
8 O' }. r2 U( I( T0 b      printk(KERN_ERR "register chrdev fail!");* L8 Q, k$ T( [1 I7 T3 w( e2 @
      return -1;
% E+ R' n8 }# \- u, I* V   }
$ r. a8 K' w" J- T- q   
7 B: m9 X+ d- M) s   mcbsp_cdev=cdev_alloc();7 e3 ]% C& l9 ], u! m8 r
   
+ Y( K: @: |2 j/ {* _   if(mcbsp_cdev!=NULL)
8 O- l& ~/ W0 S1 m. K! t0 g   {: Y0 `7 V5 n& E  m4 t5 u# q
      cdev_init(mcbsp_cdev,&mcbsp_fops);' i9 }* B# m7 z( C- B+ d: n
      mcbsp_cdev->ops=&mcbsp_fops;9 i7 q6 _" L+ b5 P
      mcbsp_cdev->owner=THIS_MODULE;
$ e7 S: d# Y6 r0 c- J      
% ~" B) ^: l  Q+ K+ C. M+ K! s      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))5 L7 x+ {2 H4 ]/ H3 V' X  T- h
          printk(KERN_ERR "register cdev fail!");
3 f+ N$ |& C4 F! {      else" c' }3 d: e9 D+ I# k) o, u! ?
          printk(KERN_ERR "register success!\n");
/ s6 U8 M! W6 t% R   }7 Z5 W$ w6 |' K! L
   else/ _9 K3 v2 N8 V1 K6 A9 D4 [
   {
9 W+ r" K: Q7 ~      printk(KERN_ERR "register cdev err!");
% C, z7 i& V/ k2 l      return -1;
, p5 G9 }" m( F9 j' h% c9 W# ~   }
( N$ ?$ K! ~- N: M0 j( G   
$ g4 C, @* I# ?& X( a8 q) Q) o  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
5 n2 ^% D& q8 K- |   if(IS_ERR(mcbsp_class))& y; d5 i+ `1 H8 j
   {- \' ]& X# i' l' L7 b/ m1 i4 Z0 Z
      printk(KERN_ERR "register class err!");9 G) R- ], n! j1 G2 q' v
   return -1;, f1 r! x: w# z: C
   }
! S8 A0 y& B$ f8 k8 K   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);2 m5 S; u% X( n8 ?" O

  p; O3 T. T) j2 x   //PSC
3 `3 e/ Y: d4 X1 K1 D9 w/ g   //add Enable MCBSP
: v# {; w8 @% G6 N   //test
3 Z5 H9 r- D( o0 b9 k8 W, C5 m   temp = 0x80000003;
' c- F5 m- B" }2 P* R) C0 \; Z5 M   writel(temp, IO_ADDRESS(MDCTL15_ADDR));+ k/ |/ C8 o3 b! _( f3 R2 f
   temp = 0x00000003;/ E* M. e# J( @  H  T! G
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
  F* G% x3 I  }8 F , o0 p: g' U0 A- p- n* I) ~
   temp = 0x001FF201;' u7 l: r* l6 ^1 e
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
6 Y1 ?: y5 l) N   
5 @# H; ?6 r/ I6 m4 h/ ?   //PINMUX  
- D1 D" M4 D  P9 o" v+ Y" }/ t# T" G   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
3 y3 c7 S- j7 f' P* x   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  9 m; Z! R/ u) l' a' e( |+ f0 a
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
1 @- i' v0 u' y2 B9 v5 I/ e( p& ]   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);! G! `$ Y6 P% B8 }4 z1 t
   
3 J) N/ K$ |& m+ s! N9 k   //SLEEP_EN,EPR,L138_SHK1,L138_RC2 v9 h. Z4 \! A- }. v0 C% v
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  / e* P( P& O2 F
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
! o8 M+ s% {  G( y7 `   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
/ l+ S1 s, p8 n& H  a. {
; g, @/ ^) c' n9 P   //RESETn,L138_SHK2
+ Y' @- J3 l) `4 t% v   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
9 v5 A" ]$ V9 m   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   7 N3 ]8 h0 M; u
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
9 t( M% r* c$ ^! h. ?+ m # Y- c+ w) @% N, [2 T+ k  R

( q$ C- k2 A# r$ g8 U8 S  //SPCR Register' T; A8 a) c8 }
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
* }5 W6 z* @: c- p6 H  temp = 0x03000000;//(DLB=0)
% _/ M5 _2 V( v. f( a1 U // temp = 0x03008000;//(DLB=1)) R7 ]0 j, T/ \! @! {8 S
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
2 ^6 B8 ~5 ^% o3 W7 S  temp = readl(IO_ADDRESS(SPCR_ADDR));
9 e0 C/ M1 m, S* t0 F  printk("temp=%x\n",temp);1 f  H# V0 j* _, M% P

* Y9 N1 _5 z! ?9 }" \* C$ s6 z6 O) ^   //PCR Register) q4 j' A  D, u
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
& @5 i" n  i8 L, S$ n* w  // temp = 0x00000F0F;
6 M$ _1 P4 n/ O: E$ J9 W$ }- r  temp = 0x00000B0F;9 y- K% l' Z  B: l, `" }
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
2 Q0 \' J' L. B" f  temp = readl(IO_ADDRESS(PCR_ADDR));
& O" r; U- S9 F* D  printk("temp=%x\n",temp);  
0 y4 o% N1 f0 i1 h* I   //SRGR Register5 B# V7 |9 K/ `; D
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==111 D. r3 F6 ]- ?; n( I3 }! |
//temp = 0x301F000B;( {; p) ?& R$ d6 ?  A
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
) y" v4 _2 u9 s- Y& |; j  temp = readl(IO_ADDRESS(SRGR_ADDR));
8 A% `  F" q0 q. j$ d+ v) u" m  printk("temp=%x\n",temp);- y+ I7 {8 S9 U4 z! q+ _8 }6 r( l- }6 x
   //RCR
* M$ b: `: Y6 b- b1 H4 E   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
6 a) a& {8 p) J& G4 B# b   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0$ Q5 W1 P8 j* i3 U) o( D/ o
   temp = 0x00440040;* y7 |8 O4 w" W$ M
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
$ F% d8 ?/ W$ C   temp = readl(IO_ADDRESS(RCR_ADDR));
, L/ M, x) U/ t' V' C4 ?   printk("temp=%x\n",temp);) j) K5 }2 G/ _4 p" H1 M4 T2 r
   //XCR( e. y- u- C: d/ M
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1$ Z% q1 }  v" U1 ^! v( b
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0; ?! l* x- |  Z+ x
   temp = 0x00440040;
. o$ h: T6 q8 Z+ O   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   8 E, @3 B$ K' ^: b3 Z; G
   temp = readl(IO_ADDRESS(XCR_ADDR));1 l: W% Q) H* T3 n% ~" e7 Q
   printk("temp=%x\n",temp);' i5 y; C) `. J, p
  udelay(100);
! B+ [# H. x1 c7 F  //SPCR Register
( r, U: x, R3 j2 |! w  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
" a$ g; |! E$ F+ V  temp = 0x03C10001;   //DLB = 0 VS DLB = 1- ~8 O8 i' O  O( w) g- I$ i1 d
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled2 E  d, Y! _6 J7 b* C, U
  temp = readl(IO_ADDRESS(SPCR_ADDR));: l8 D- Z# Y6 r, G+ {$ m' }
  printk("temp=%x\n",temp);2 c  Z( U% y9 \, H- r
  udelay(100);2 \+ \) N: b& {9 g, x: T
" }9 F! i' g: W, [% s
  //set GPIO direction
! \: W; u9 k6 e   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
% ~8 |9 B4 v( u' y$ U+ l   temp = temp | 0x00000100;//EPR----input
6 ]9 K8 d/ n9 ?   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output) p4 ]- F/ d7 i% V0 ]
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
& o! O1 P1 a* [8 R7 x % q7 S1 k, C' d2 z3 E6 Y
   return 0;
6 W# S8 _/ e$ P- X+ |}
% q7 K: K5 z/ o4 y: Q) Ostatic void __exit MCBSP_exit(void)& O% G+ s; X% g' G5 t* `: g
{7 b6 F: c; I! w2 W4 W+ N
   printk("mcbsp chrdev exit!\n");
7 x  Z7 _0 J7 a/ w$ \   cdev_del(mcbsp_cdev);( b. j9 A8 y( k# f; _
   unregister_chrdev_region(mcbsp_dev,count);
% V" d( d6 K; A! e6 {9 ]' M   device_destroy(mcbsp_class,mcbsp_dev);
7 A& R$ R) J/ M: ?, P/ s" Q6 R# k   class_destroy(mcbsp_class);4 _( s5 S$ K. N1 e$ X
}" _0 U. t$ k+ B
module_init(MCBSP_init);
! J7 X2 Z, q  ^- }; fmodule_exit(MCBSP_exit);$ _% Z& b8 D$ B* o, r* i

8 K( @! x( _) |5 @9 D+ x( nMODULE_LICENSE("GPL");
+ U$ K# {. M+ X) v- B7 @' \; }
5 h. @& a2 E, w: h: f1 }/ F: \我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。+ y' \5 @+ k; D, S. N  a, W
我的应用层的测试程序如下
+ a4 I2 Y! W0 ^7 ]$ f* p+ d" z#include <stdio.h>+ O8 p& |4 q9 l6 I+ x: F. h: |
#include <string.h>5 n6 Q% e6 z7 y! l
#include <fcntl.h>" x2 l* n% D' ~' ^
#include <unistd.h>
2 u8 b& U! U2 e& \! b#include <signal.h>
4 d' c7 g9 V+ l5 u* R#include <pthread.h>       //线程
! R6 P4 x  \, S  m8 i# B  a#include <stdlib.h>
0 W9 R+ |; b4 E3 A: V0 f#include <pcap.h>          //捕获网口数据5 l* p3 d* i- E1 @/ s7 e& }
#include <semaphore.h>     //信号1 F9 h- P( F9 M  \4 m& ?
#include <sys/types.h>     //消息对列
7 k# Y% _4 b" s+ i" g) E. U+ M  u# ?#include <sys/ipc.h>       //消息队列
1 g0 t4 a0 k2 B0 i9 \# S#include <sys/msg.h>       //消息队列
) x! o+ v8 d) r$ \2 O$ R#include <sys/select.h># s3 m* p. x8 |
#include <sys/syscall.h>
5 q: B) V  |6 Z! K- ?& o( R#include <sys/stat.h>6 h' Y  s6 j4 W$ O) `
#include <sys/mman.h>
" J! A3 t% \% }$ b3 `5 W7 f  Z#define msleep(x) usleep(1000*x): D0 Z# x+ U' a- C  P
" Y; R$ ~' {0 S
int main()
% K: r& C0 D8 `* h{
) I. f/ L5 g9 ^3 Q3 f    //MCBSP,ARM与AMBE2000交互设备
) n6 n6 G' M! O0 x int fd;  L1 S2 e0 C; w
unsigned short data_write = 0x5555;. H3 Q+ i# r7 M* O6 s5 i
unsigned short data_read = 0x00;
0 u- O  _! T0 o) A. |9 W# u, n  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
" |' @. N6 C/ F, K7 t //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
; p& `; w; @" C: b: F   
) N6 _8 e  H. q7 q& G  n  if(fd < 0)
; M" g7 L# {5 P4 t* ]# ~3 X& y# ^7 S* z  {% I) ]6 o+ a+ i+ R7 ~
     perror("open failed\n");1 t. P. X4 F* V8 z6 m
     return -1;" X3 k  [( k) F
  }
; y1 w4 h: L. |& i% s1 x% f  5 r% `' C& ~4 I" n: f! W5 \6 g+ l
  while(1)( ~$ y& E3 I# y5 B9 C, G+ ~8 }
  {9 w8 p) b* u8 A! C' G  |
   
, t9 w- T8 m/ b, {9 ?; K# V   //AMBE2000每次读写是24个字为一帧
% M! q9 F: ~2 H6 n, q   //写数据时将数据在底层存储起来,等到中断的时候再发送8 M- l" N8 Z8 e0 o. f# }1 i
   //AMBE2000输入数据是以0x13EC开头的3 X+ J: O" C8 N
   write(fd,&data_write,sizeof(unsigned short));/ v$ J/ M  W3 D/ o8 W
   + x* U- S* w+ ]
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
- x* b+ R0 u/ w) V7 ^   read(fd,&data_read,sizeof(unsigned short));& {  I0 {1 p5 V; A9 \
   
& @- T6 W6 }4 Q0 V   if(data_read == 0x13Ec)& \# I8 Z9 |; |0 c
   {
' }* b! r. }  x' Z; s. U8 |   
' ?, O7 r5 ]' b9 L1 G    printf("data_read = %x\n",data_read);( Y1 A+ F- F& r
   }1 m  |: c! x4 r- D! o, D
   
6 @3 B( o$ a" f3 ~  i. a0 V" s. [   msleep(10);
9 C( F: F7 Z+ O6 ~5 w  c  
% i1 b. [4 w) w2 _2 |7 x  /*, t* J* d- V2 e) D# V) {
   ioctl(fd,1);   1 q/ ~/ X2 N# y* x( d6 O
sleep(1);
9 G/ t- s- {7 ?, Q ioctl(fd,0);9 V# \+ M; p' n2 s
sleep(1);4 x: m) E; B! e; I9 W
*/
" m. V/ R0 x+ M7 z  W  }   
! ?9 O: k. R  U1 n$ X: P" Z6 g return 0;) E9 P7 @5 X6 t* y/ E2 \
/ i: m4 ~' s  L( t+ S. ?
}
& r  q2 T/ D: G# ~: a, [
" j5 p0 N* S- \6 [( B& M# X% S9 o4 ]" ]多谢各位指教,谢谢! 急
9 u7 J& w) E! y$ @" j2 o: X/ {- k3 a* v- G7 F
2 |3 ]$ \) H  @# ]

) {5 K% a% }% G- |( ^  X& `) g, \
0 _% E! K! `5 H/ ~. i" a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 00:18 , Processed in 0.048149 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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