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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
1 ?5 ^- \8 c- G; A5 j1 [" s/*
$ O- A" S, z0 n2 }2 u4 i0 J * Copyright (C) 2009 Texas Instruments Inc
- w# q. q' |1 ?* A1 W( \2 j *
5 g: q* [5 [. ~0 J8 \+ g- C * This program is free software; you can redistribute it and/or modify
/ s0 f  K# x( Q, o' l * it under the terms of the GNU General Public License as published by
* ~; J2 T9 n/ ~# w% ^: N2 P- N * the Free Software Foundation; either version 2 of the License, or
6 V: p2 _$ d" o; \ * (at your option)any later version.
0 i1 T3 K  q5 A  h, s, ~1 H# e& b *
, Y, {, W# t- c7 @) S1 f * This program is distributed in the hope that it will be useful,6 l4 N  Z/ U- f; N1 k& j
* but WITHOUT ANY WARRANTY; without even the implied warranty of
" C( _6 s; f0 E* q2 v/ A" Z * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 r+ \7 ]. s7 ]
* GNU General Public License for more details.
7 D+ u" H3 r; ]7 }& ]" h2 P% R! g" ?$ a *, L) k) s3 ]$ `. F3 V' D" d" V. ]
* You should have received a copy of the GNU General Public License
; m) u4 C" z0 O* ?1 O% ~. D * along with this program; if not, write to the Free Software# o2 L$ _7 Y, u4 H1 ?
* Foundati
: |, v% X, |' Y0 {*/: K+ p( ]5 w( V' a$ E2 M, O
#include <linux/module.h>
8 E: m1 V! T1 G; }' e#include <linux/init.h>) J- X: n' B" Q/ R: ?9 s, n4 ~
#include <linux/errno.h>
: G! i9 |" [( j#include <linux/types.h>. ~' ]' ?9 W6 i
#include <linux/interrupt.h>
) C1 n, X0 Q! y, ^9 `9 O; O/ S#include <linux/io.h>
: ^# m7 |; I  D" [% x#include <linux/sysctl.h>4 d- f& k; o6 @; ?7 O4 I
#include <linux/mm.h>% I3 m) e1 D& H1 s7 C3 u1 J
#include <linux/delay.h>+ }* v' r7 Z& g% M! a
#include<linux/kernel.h>' n' z3 m: a9 [! c! w& }+ }
#include<linux/fs.h>
9 n, b2 I5 M/ p/ i) @) M#include<linux/ioctl.h>$ R% s* \& Y1 Z) Q+ z
#include<linux/cdev.h>
& I5 i; f  I" N, N' e#include<linux/kdev_t.h>& o+ \, N: p# s# P+ O- m
#include<linux/gpio.h>
  l# F& u9 ]0 |  J6 B#include <mach/hardware.h>
# d8 Y* D) s& l% G#include <mach/irqs.h>
. b5 P$ a; H1 h  Z
% w! u' n3 t( v2 L; b! V#include <asm/mach-types.h>
8 ?# ?/ w: }+ d. j# V0 O& o#include <asm/mach/arch.h>4 @7 u, M4 C% _
#include <mach/da8xx.h>
+ e; h" [) f! K0 e2 [#define  SYSCFG_BASE   0x01c14000$ [; p9 s' c, f4 o# C4 A
#define  PINMUX1_OFFSET   0x124 " c2 p$ G2 ]! s0 Y6 h
#define  PINMUX18_OFFSET  0x168 5 k) }9 c8 _! S: @! B! Z
#define  PINMUX19_OFFSET  0x16c" A; D% ?- d5 [9 y  D$ }
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
( K+ {9 D3 g% ~8 J  {#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
8 ^. W: ^. H2 }" ^) Y$ S#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR/ d$ A$ h9 p9 c  `( E, l5 N/ n
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR, Q" n2 Z1 q" Y$ A- Q# X, K( y
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
. Y# Z# C. b( `9 i4 L  h                           
' a+ e  w2 W( x4 J+ d( s#define DXR_ADDR      0x01D11004  //MCBSP1_DXR! O- ?; w6 }0 p( A- o2 V
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR; V9 |  K1 Y4 i) L- B) @; E
//PSC! _( E4 y0 |6 w+ _* I- C) s7 _' b* j
#define  PTCMD_ADDR   0x01E27120  5 e& a+ t( s9 P0 Y
#define  MDCTL15_ADDR 0x01E27A3C* H. |& t* T1 s! C% t$ S" v
#define  PDCTL1_ADDR  0x01E27304$ B0 V! X6 z8 ~' B' s
//GPIO8 direction
& \9 `$ B8 L3 \4 f0 R" n6 [#define GPIO8_DIRECT  0x01E260B0% g3 R- }% w2 l& T/ G1 ^/ v+ L
#define GPIO8_OUT     0x01E260B4
1 u4 n: _: y, m#define GPIO8_IN     0x01E260C0
- H3 s& }6 t" W* _1 W) Y' }6 E
1 H! W% f/ {0 `& X& ~1 L( n( r//#define MCBSP1_RINT    99              6 z2 Q$ ^4 k- c) J. @2 p/ R5 d
//#define MCBSP1_XINT    100  
; K: d1 @+ V7 ]& \' k% ~6 [static int MCBSP_MAJOR=239;
% S: S' N9 H! A3 j7 c  Xstatic int MCBSP_MINOR=0;% v6 ?: ^& _9 u& u
static int count =1;* ~) Z9 a& f8 c& p( ?
+ [; a, [0 B! o1 x  [! E& n7 w
#define MCBSP_NAME  "MCBSP-device"
& N* Q3 G, k9 {% Z& v: B4 y
4 M  ^; q( s& E0 cstatic struct cdev *mcbsp_cdev;( p$ r+ @/ h2 }
static struct class *mcbsp_class;
# l* L3 @* D& Sstatic dev_t mcbsp_dev;& l' Z; c/ b  X4 F$ ~- n
unsigned int DRR_data;
3 I1 b" S6 s6 D/ \& bunsigned int DXR_data;
8 S) _8 i8 o$ Wstatic int mcbsp_open(struct inode *inode,struct file *file)/ f. q! H, m; n2 X* w
{
1 q2 m! h' Q* O   
) \! n( u" R4 F% r% S# e. g/ M- }) W   //interrupt enable,initialized
8 L- b" t% t( `   unsigned int temp;1 a: e3 _1 y. o# a
   //SLEEP_EN(GPIO8[10])---0; @+ T3 l; b: d; u% {8 V
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
/ h( u6 Q- A2 u  c& J" {6 @6 K   temp=temp&(~0x00000400);
3 u9 R, o) f) c/ A* i) J   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]) s& B! Q) w4 M/ Q6 h. y
  //RESETn(GPIO8[8])----0----1$ i( g7 }; \. K( v$ s
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 ^* l6 L1 a3 C' w. W  t$ a! |  c+ [, [
   temp=temp&(~0x00000100);6 c, `, N9 y- i) b, h# x' k
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
( {. E$ y; }- ]% q+ K( v9 l: V   udelay(100);/ M5 R& D* ]" W( `, l; e
   temp=temp| 0x00000100;7 j# F& r" _" Y
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
8 N5 Q+ C2 M( g* R' n   udelay(100);% [. u: N) H8 W2 N9 }$ ^$ \
   printk("open success!\n");
. I' Q1 M' B9 s; N4 u$ a! |   return 0;! _4 F( N: X# @: R* ^; z$ _; j
}
6 L  g; x, P  C2 a1 h" x; q' k+ }, s' I. [9 b
static int mcbsp_release(struct inode *inode,struct file *file)
) B0 T0 i9 {, U9 o2 D2 M8 W0 i{3 m# Z8 @8 b  s
   printk("release success!\n");
- U) z6 s3 S7 {0 t, W2 G( g   return 0;
9 g2 [" G; R" ]) X2 V0 q}, K# |: V7 [$ |5 x' n& v% D) p

. ?" I5 y) x; `* ]) W% Wstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off). o) t& F3 R$ @6 B7 R0 v% @/ R
{% i$ J0 e; U* i) `
    copy_from_user(&DXR_data,buf,len);
2 m+ C5 s7 [) A. p$ u6 i    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       . F& i3 k& ^9 _. [
    return 0;# i: B8 a; s+ F+ X* I- Y" [! K
" i# K. p$ o+ I% }
}1 I  P  c! ?- Q5 W) K- {
: a- K; y: [- _/ U9 `1 k" x& z
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off): E6 S+ n! T3 a/ {8 w+ j: M- L$ q
{
& U, y" V  {. ^! R   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));: F/ Q1 y+ Q0 N( H+ E
   copy_to_user(buf,&DRR_data,len);
$ y. u7 s4 H# h: H* `; Z- C% E2 f: ^   return 0;8 _# F7 C1 G3 e% v9 i3 {3 d
}4 J* h- \' i% y7 @9 M
" ^% L$ r5 ?) A! L

5 U# M* i7 N# A5 R7 i0 }( ~1 gstatic struct  file_operations mcbsp_fops=# h6 z8 [0 O3 J$ W
{
! h( g+ W( F$ i   .owner=THIS_MODULE,
) R% o# u( D- ^$ c7 k( e: w3 _% f8 F   .open=mcbsp_open,
" l0 ^& _& J* l7 V   .release=mcbsp_release,
+ s  x8 k2 q: u  L2 u/ a' R. u) S   .write=mcbsp_write,
7 l( e" T$ }$ p   .read=mcbsp_read,& n3 v( N- L9 v5 K; S8 e+ H4 {
};$ h6 [! U+ |- V
static int __init MCBSP_init(void)4 ~  t2 Q- l' E# d* x; Z. m
{
, \& q7 R: O. J2 k# o: g* M9 Y   int ret;" f& ]4 \3 X5 l: ^
   unsigned  int   PINMUX1_REG_old;9 S* D5 s5 l, i+ \# j6 e; m
   unsigned  int   PINMUX18_REG_old;3 M1 U' p* \1 h* |' [2 R2 D
   unsigned  int   PINMUX19_REG_old;$ g3 n0 V6 p% E# N9 l
   unsigned  int   temp;  
& s. M- W' g. n* K" N5 G   if(MCBSP_MAJOR)
9 ?" o: |( R' Q8 M& s9 o   {
) V9 Z* m; E  j6 H      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);& Z3 @) S4 N; h
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);, a/ m# w$ H; f6 v$ U! P5 K
   }" m! ~3 i7 V9 F6 s
   else0 F* w! B% {, Z2 N' `  F8 h
   {; u' R' n. `4 w3 i5 X
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
1 R, i; ^7 T8 g" E4 Q      MCBSP_MAJOR=MAJOR(mcbsp_dev);$ e" j8 N( F! D- K0 h9 `3 R2 `0 \
   }
' o1 z/ B0 I) ^7 W4 C1 e   * ]5 Y* n0 x7 X* S& x% W7 J0 u
   if(ret<0)/ J: `! s4 q6 y2 U
   {5 D2 s) Y( f- T! p
      printk(KERN_ERR "register chrdev fail!");
. ~4 }7 l0 l2 R% Q% p      return -1;
4 ?0 Y8 }6 I" O# I9 ?0 j   }- |* S$ S; k' u4 ]# G
   
5 J, m( k1 O) |5 {   mcbsp_cdev=cdev_alloc();2 X! L7 D1 G7 N: a3 t7 g( h
   
$ ~, h. Q) U: w+ V   if(mcbsp_cdev!=NULL)8 E3 K( O6 w" R5 H8 Q; }
   {' A2 J% K3 F1 e0 Y4 ]' |0 C% B4 k
      cdev_init(mcbsp_cdev,&mcbsp_fops);
2 Y4 v* a" G9 ?% z      mcbsp_cdev->ops=&mcbsp_fops;
7 t& {- |. h; Z; F; [" p! C# Q8 r3 p! X      mcbsp_cdev->owner=THIS_MODULE;& e/ g* L8 i! ?/ U! w
      
- e6 w- f4 T6 R* ]' A      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
$ }; X" a& H' I          printk(KERN_ERR "register cdev fail!");
* K7 x, L, A' `% @* c+ V5 W& h2 u# \      else
: ?! k* H  |; m- w3 ]: x3 z          printk(KERN_ERR "register success!\n");
' g" _' e* W; y; J   }6 a6 d* s+ }8 O8 h6 B7 G
   else
3 A  Z8 s5 B4 z! `   {+ v$ z% |" s+ `8 B" y6 B  z
      printk(KERN_ERR "register cdev err!");9 L3 W% [6 T$ g& J
      return -1;3 C5 y1 ?- q9 f& J
   }
/ j* d+ R9 D: @9 Y   
! Q* S- F6 s- U* [  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);+ A( ^8 G9 H+ E! l/ K2 e  U
   if(IS_ERR(mcbsp_class))
/ ~0 {; l4 Y9 E; }2 w* v   {+ @+ Z( E& A+ N* M( Z& G
      printk(KERN_ERR "register class err!");
* _1 x) P$ C4 E& _/ W2 ]( I   return -1;* }$ Y7 M8 T* B( v
   }
# A& A0 d: o. v8 t/ ?- V   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
" V2 D$ T" Q; F3 }+ j
; c8 ?7 J2 }6 A9 |$ R% U   //PSC. o& Y% C! _/ v: l
   //add Enable MCBSP" h2 O" O; o( l; W, z
   //test3 j8 L: c' M# L* W/ r& {
   temp = 0x80000003;8 S) L3 R) w- |, t
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
" N4 q2 B$ D3 u, J$ U   temp = 0x00000003;
+ F9 F7 I( |2 m7 \6 V3 b0 N   writel(temp, IO_ADDRESS(PTCMD_ADDR));& W# Y$ Y  N; Z" ^, c
5 b  `/ ~* s4 ~7 B( z
   temp = 0x001FF201;
+ z8 x  B2 X3 Z3 w1 w4 k   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
+ ?- C4 G( O3 d, }: Q, Q   & y, B  u& ^# K- D+ J
   //PINMUX  5 K. i* i0 Z4 G. Y. G
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,# P  A& l1 Y/ @0 H/ ^
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
1 A. f4 ^5 k% H, k# I   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   7 p; D1 K5 x( q8 n
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
* \+ t6 \' X( \: S4 p   % M2 g; r8 h  V8 U: x
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
" w2 a1 z+ K2 v3 @- `   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
3 A' f3 C& H; a# m* E   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   2 n5 {, ~- [7 B/ W, Q2 C
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);( s! c3 E! ~& e7 W. `

- J" r! R5 P. W   //RESETn,L138_SHK2
* Q" w) z; c2 W! X1 I+ o+ h   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  - v- f& `' m3 B( B: J! }
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;     ^& @9 u: a( W7 J9 w  D8 d
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
9 R- |; k. p5 z, |& H. {) c * ~/ I$ }- ^6 e

  B/ v- P- N0 ]0 t  //SPCR Register& i! c1 ^. X* i8 G! Y
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset3 w2 n0 V. k! U; {; G) z, ~: q( F; ~
  temp = 0x03000000;//(DLB=0)
+ Y; {. l/ L8 \ // temp = 0x03008000;//(DLB=1)$ V: _+ `4 w% T6 t
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset* }$ o! G5 A! A2 p& V
  temp = readl(IO_ADDRESS(SPCR_ADDR));
5 ^! w% w" @2 M1 |5 s4 S( k! v. y% p: c+ B  printk("temp=%x\n",temp);
  Z7 H" j, F' g- ]
3 f0 l% A3 o& p$ `. \. t  t   //PCR Register
! i! I  _$ P" C5 }6 u# \   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-03 K8 O3 g  d# I2 p
  // temp = 0x00000F0F;
: w4 p- ?% w1 u* r. s& |  temp = 0x00000B0F;$ U6 ~/ A0 v8 U% I0 s" A
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
. E! L+ W$ c5 s( h) q* h( X  temp = readl(IO_ADDRESS(PCR_ADDR));
: o: D/ a* o) V7 q% [  printk("temp=%x\n",temp);  
4 _3 H: |6 {' F) @2 Z0 l* r) C1 L   //SRGR Register4 u& r" e' ^3 a; J1 z; U
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==116 D- ?) ^: }- q4 q* A+ I
//temp = 0x301F000B;& Z1 a/ |( ~' f2 g# @0 N8 k
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
4 H2 h" f- x. L6 x  c, E  temp = readl(IO_ADDRESS(SRGR_ADDR));
" S" Y5 J# z! E1 E6 a/ ]3 f( @& a" Y  printk("temp=%x\n",temp);
0 z: `4 O% r- t! [' v# M   //RCR
3 o9 U, @  _  a   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,1 |( |6 a+ j/ z! Q
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
1 ^$ d  H: H% ]/ E( P, w  j3 O7 }   temp = 0x00440040;1 o% ^3 J! o6 l5 r7 e3 S" {7 N
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   * |6 C3 K' R& P4 R; y; h. i9 S' \3 a
   temp = readl(IO_ADDRESS(RCR_ADDR));
4 \; Z% n% r7 }, V" j# e   printk("temp=%x\n",temp);) z8 I: s' z1 R8 T9 `7 H% a
   //XCR; c/ ~" J/ p% A8 L( e
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1' k/ J8 ?1 [/ ]% Z: T  X
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
0 k# e! v. @  k$ e# d  [8 B   temp = 0x00440040;
* h7 q5 q' P$ n4 x+ j   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
' l4 n5 e& j# p8 ^$ L& ]   temp = readl(IO_ADDRESS(XCR_ADDR));
9 i/ X( Z8 M8 p   printk("temp=%x\n",temp);
2 [7 A8 x- C6 B8 z/ V; }  udelay(100);1 {& z9 Y( H5 q. V
  //SPCR Register
! U9 `* U' n  e, ]# ^! N% `  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
: D# W4 j& `% j( Q( r9 Q  temp = 0x03C10001;   //DLB = 0 VS DLB = 14 b) V6 P3 d* k6 ]/ C: |
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled& S, E0 S+ N- e6 ]- P- O2 `3 }
  temp = readl(IO_ADDRESS(SPCR_ADDR));
  n/ V- i4 f9 i2 Z  printk("temp=%x\n",temp);
  `* @6 x2 p* u, M) V  udelay(100);
& ^8 D5 ]5 W) b6 L# K) I+ _# w; _3 n' }: E5 t5 G: g
  //set GPIO direction7 G' N4 _  m$ m$ G% P
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));! F# z$ `) y; c
   temp = temp | 0x00000100;//EPR----input$ A) r3 z# [- |6 c$ z' Q
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output1 G  Z  l& b4 M6 J
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
' H0 k3 U, u- U
# l% b  ?: N) L! `8 y! o  \   return 0;
. m" Y- d. Z5 E}
% a4 F: Y# e# A' x7 Bstatic void __exit MCBSP_exit(void)
0 J, V/ O; q( _3 @% H  ?{* P6 O; L& j/ @* I
   printk("mcbsp chrdev exit!\n");
8 I9 `6 E2 q; l  |8 O* ^5 r   cdev_del(mcbsp_cdev);' D& H1 O* I: @1 y7 ]
   unregister_chrdev_region(mcbsp_dev,count);6 e3 D- D  Z5 v0 u$ g
   device_destroy(mcbsp_class,mcbsp_dev);$ d/ l* l0 I. a# m
   class_destroy(mcbsp_class);
" \" r7 d- e* b}! q: N; d9 h' O3 ~" ^
module_init(MCBSP_init);+ |/ }# e6 b3 X+ Q3 d+ C. q; ^
module_exit(MCBSP_exit);7 k9 k0 u3 [! G% }+ e8 m$ e
' T* g9 j6 |/ h) L
MODULE_LICENSE("GPL");
0 c( }9 i: h2 D! O
  L1 Y- ?8 T2 T我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。4 p3 u6 ^* u  G3 q, e/ O- z
我的应用层的测试程序如下3 L! H, ^) ^1 b$ B* R; Q% q
#include <stdio.h>" I2 J/ B! y8 A, |$ K
#include <string.h>
& O+ J* K  p  `* A5 e  \& p* |#include <fcntl.h>2 t+ @" V9 J/ O2 u: [
#include <unistd.h>
  h% B( K8 H% W) D7 q* o% ?#include <signal.h>/ t0 `8 ~# o# y; Y- F
#include <pthread.h>       //线程
6 t) j9 E. b: @! o#include <stdlib.h>
- _( [; J2 e2 H#include <pcap.h>          //捕获网口数据8 H, n  _1 V4 t; |) N7 S
#include <semaphore.h>     //信号
0 H! G9 L) d, h3 j6 F$ B#include <sys/types.h>     //消息对列- i, k* ?; [1 H
#include <sys/ipc.h>       //消息队列
: O- K( s$ y+ P& ?2 G, q2 E. b+ q#include <sys/msg.h>       //消息队列
4 N3 a) j3 B& E#include <sys/select.h>
- g/ T9 {  u; |5 r2 l2 G#include <sys/syscall.h>- P6 b5 l9 z( G2 o' r+ {7 ~$ A4 X
#include <sys/stat.h>
* p. H% E, m, A4 ~#include <sys/mman.h>
" d; V: A5 T* T* ?1 R#define msleep(x) usleep(1000*x)8 k0 m3 n9 c+ J, o! S$ ]

: u3 V7 y% Y! D% Lint main()
# E1 L8 Q- O* k2 g8 k{ , w# D8 J+ b2 h3 k
    //MCBSP,ARM与AMBE2000交互设备! I! ^) H% n$ {  i; X- j5 V
int fd;
4 Z0 [& s5 K. }  J" D) X, S5 Z unsigned short data_write = 0x5555;2 }0 v% @8 g" g# X. w2 D6 o0 n
unsigned short data_read = 0x00;
9 e2 S* V+ j9 J9 k+ ^# J  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ ~( |- o$ k( s5 M //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
, n0 s6 O8 W& I  ^    0 s+ T: y  T% M* [
  if(fd < 0)
) ^& o. ~1 ?. H) d. R7 u% `; R$ z  {
: k: U) u8 v8 j1 q/ g8 o5 h     perror("open failed\n");
! k# J9 E/ Z/ [2 k: ?* {" K; o6 H     return -1;
; w& u9 f$ K0 B0 b  }
  Y/ `* M% ^, o; }  
6 d( }" a+ B. [- C* }$ f  while(1)
+ T; {3 y: i2 G& K  {
9 ?6 Y! i$ c$ R" U4 N   
' a! r4 h/ i) Y6 T   //AMBE2000每次读写是24个字为一帧
7 n& }: s: R4 D: X( f   //写数据时将数据在底层存储起来,等到中断的时候再发送, m( S: u) z  M7 ^4 v: S/ O
   //AMBE2000输入数据是以0x13EC开头的
% ]) I' l8 r9 n2 w   write(fd,&data_write,sizeof(unsigned short));  ]: d6 h* `# a3 X( B( E
   . z2 B4 [6 n; l; i
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
+ ^: z+ F% D5 x* `  v2 H+ Z2 U% c   read(fd,&data_read,sizeof(unsigned short));
3 ~: C: P  m+ Q   ! m7 P/ s/ K6 F3 v. O7 D+ t2 L
   if(data_read == 0x13Ec)2 f/ O- v8 J& g) r
   {
) ]: [" J" z: m7 v0 b   
$ U$ B3 i. W7 [) }# J4 B2 P    printf("data_read = %x\n",data_read);6 ]  _# L' l  Z( f
   }
+ t& w/ J: R: D! d+ J; n7 ?   1 a3 F7 J! E4 Y* f8 ^  ~4 P3 ~
   msleep(10);  `) y6 @- d" M. W
  * F3 |( i  v0 ]
  /*$ v2 m! b7 h, u: J
   ioctl(fd,1);   % T* G  {' h, C* ?  Q& Z
sleep(1);* j! K9 T1 [, ?
ioctl(fd,0);
5 q' J- t. c1 M# b: T2 G8 s sleep(1);" c% Y: K& L) `  Q6 W( K% [0 i# X
*/
# a& V% J0 F2 D! n  }   
# V# s) w/ s, H$ S6 m& j return 0;6 @2 u* D) q  g' d; D3 _
. N; K5 g* U0 e+ M
}
" u$ B: M3 T; L1 A- a5 P# w
% Y* j$ L) ]" N) r; e4 s6 F多谢各位指教,谢谢! 急
, m3 v5 {, B) _( {9 T) ^. ]6 R% ^. ]3 `6 E  B; A
6 L1 ]* z- h( ^6 Y) a

" u/ ^  G- ]- |1 ^
; |6 G' n  E% J/ Y" t. n0 H& Z% U5 C) x/ P! o$ B$ C2 A5 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 15:42 , Processed in 0.055428 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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