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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
: G3 R* w: ]6 F3 W; s6 g3 o/ k/*
$ d! q1 J- i% K4 W * Copyright (C) 2009 Texas Instruments Inc
2 c6 {2 Q+ j, x0 E0 z" r *& M3 [- ~' X) B9 U( H
* This program is free software; you can redistribute it and/or modify
& f! E3 S( s/ ] * it under the terms of the GNU General Public License as published by; T! q! q/ j$ w9 C: O% s, a
* the Free Software Foundation; either version 2 of the License, or! D( H7 X. ]9 F) x% p9 v# I- Q8 L
* (at your option)any later version.
, h* i/ [3 J' T/ [' t/ ~ *+ p  F% T) o: O, g1 h
* This program is distributed in the hope that it will be useful,  e( {0 A# y' n: x4 g9 `4 v
* but WITHOUT ANY WARRANTY; without even the implied warranty of
5 S. x8 }& M1 u5 J * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ ^' Y. W( p7 N6 p
* GNU General Public License for more details.
" y0 T! Q) E3 Z$ l1 q- d *# C: D3 ]* O) n5 W0 l; t; c
* You should have received a copy of the GNU General Public License5 r) M) c. e, A
* along with this program; if not, write to the Free Software
% p, G; a4 F  i- I: n/ K5 G * Foundati9 N% M) ^$ w* }% H7 G. x, g; h
*/  B) L) ?+ _* `0 i
#include <linux/module.h>0 u. `$ H2 i! N) Y
#include <linux/init.h>  x  d: l1 V7 Q  D) }( _: a
#include <linux/errno.h>
+ R* X- X( d) c. V' q( j9 x1 e3 J( k#include <linux/types.h>
4 S  _, D( j3 q; v/ G#include <linux/interrupt.h>. O. t2 o* F3 h8 |
#include <linux/io.h>( O4 [5 [+ |7 e" d5 P( V# g
#include <linux/sysctl.h>  K+ ?3 o0 @/ O2 D0 v
#include <linux/mm.h>
" U+ `$ m$ J% j5 k2 }#include <linux/delay.h>
# R- E; ~* {3 H#include<linux/kernel.h>
$ k1 U3 d+ R' j: U: Y" D4 F#include<linux/fs.h>
! r4 _! R& I" h#include<linux/ioctl.h># J! ?% ?! R3 b, X# j0 v% ?
#include<linux/cdev.h>
' c  X5 ~8 k% f, h#include<linux/kdev_t.h>
/ I! s2 E$ h. ?) y/ ]" @/ ^#include<linux/gpio.h>
2 W( K8 X4 u- a' k( p) a5 g#include <mach/hardware.h>% G1 ?- [- a5 L& [9 m7 g
#include <mach/irqs.h>9 R% Y  G7 s3 u3 C2 u8 R6 ]; M

6 y) a& p5 X8 v% B# ~) a' _& h" o#include <asm/mach-types.h>
# r& F7 ^! x! z8 {& j) [#include <asm/mach/arch.h>
7 k$ L, R" V0 h1 s% q' k& ~/ D#include <mach/da8xx.h>
  H% S! a9 u, p, q, k( {#define  SYSCFG_BASE   0x01c14000
: k5 t: x) ]6 ]9 ^4 A5 D' P#define  PINMUX1_OFFSET   0x124
4 G% X" l' f  P, x6 C( b  ^#define  PINMUX18_OFFSET  0x168
! T0 v/ L! j* T- y, O! P6 e; K#define  PINMUX19_OFFSET  0x16c9 J. @0 S& v) W& ?( R
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
+ e% E' c2 O' k3 P: W+ h1 V#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR, e0 @/ y/ c1 A
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
" F" L0 _/ ^6 G1 n" [/ o4 P! Y& k#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR' i" F2 z6 y$ `) |- b
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
' ?0 s$ [, I* m8 S% @& D                           
! o; R% i4 O+ E" @* \3 p4 R; B#define DXR_ADDR      0x01D11004  //MCBSP1_DXR' B* V% y$ {4 o% g* s
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR- y" @5 A- R5 k$ z) V# y
//PSC* G" P& \3 D- e$ I# m6 ]
#define  PTCMD_ADDR   0x01E27120  
  s& G6 X8 L. V: i% f6 r- N0 B/ M#define  MDCTL15_ADDR 0x01E27A3C5 N' N2 ~- ?( r/ d; K5 b2 }4 J
#define  PDCTL1_ADDR  0x01E27304" q6 @# b2 Z* U4 R4 X- H. Z
//GPIO8 direction
2 E$ B) b8 P0 u7 D8 g- E: _, ~#define GPIO8_DIRECT  0x01E260B0% [& l6 ?1 s- O& {2 `% I% i
#define GPIO8_OUT     0x01E260B4
3 P' y+ V$ Y' K0 J#define GPIO8_IN     0x01E260C0
4 }! H/ o+ `) U5 n1 e4 T( o: v& N6 o7 o+ P& E% J
//#define MCBSP1_RINT    99              : O# v* ?* M; F
//#define MCBSP1_XINT    100  
$ z9 k; `% ^! Y2 F" mstatic int MCBSP_MAJOR=239;
; m0 G. I, C/ m9 rstatic int MCBSP_MINOR=0;, r( O" E6 Z8 s9 W
static int count =1;
7 A# A* ~6 o# u& U3 N6 Q7 y# V  z& B4 @, k
#define MCBSP_NAME  "MCBSP-device"4 q& X7 `6 S' a( j9 l" V

( S1 q1 B8 u+ U% s4 ~4 a* m" kstatic struct cdev *mcbsp_cdev;; f& D# W- S" R/ m
static struct class *mcbsp_class;
) b. n% A% Z" W' f& P1 jstatic dev_t mcbsp_dev;! @. T+ m7 o$ e
unsigned int DRR_data;9 p! n3 m4 @/ @4 [& u
unsigned int DXR_data;
& ^; E9 Z" I  g6 t) s3 `& ostatic int mcbsp_open(struct inode *inode,struct file *file)8 v' ]( }" _8 p8 R+ u5 v" {3 m# d
{
9 a- `/ z2 n( f   
$ h/ O& O+ K! v' L+ f4 m   //interrupt enable,initialized
1 L9 c  w0 c5 ^2 U- {   unsigned int temp;* ^( R1 s  B3 g' }7 L/ [" {# {4 C
   //SLEEP_EN(GPIO8[10])---0
3 s# l2 O- K1 }) @4 ^- V   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));- h; _5 f! S. w! o4 r) E
   temp=temp&(~0x00000400);% Z4 k& C8 c* Q( [' e2 M
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
. `9 H/ ^2 F; \( R* ^1 a  //RESETn(GPIO8[8])----0----1! h2 |8 z$ H5 J
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));: h9 t# ^" z) R; `& c8 C
   temp=temp&(~0x00000100);# r. q9 c( F5 O/ v3 D0 u$ I" m
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0( j1 l* i) o5 w; Q: w+ v
   udelay(100);/ Q' i$ L* N7 x8 G, C
   temp=temp| 0x00000100;6 ^1 Q0 }' e: m0 Z
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1( S( E/ H$ H. B. W9 J
   udelay(100);- ]+ O, ]  X) v6 e8 \1 x# }
   printk("open success!\n");
* `- s: v& R9 s& q   return 0;/ A9 n6 W* o! W1 a( u
}
+ F# d7 |) r( Y' J: S2 c* W* Y+ z* S3 p3 U! T
static int mcbsp_release(struct inode *inode,struct file *file)4 p( \" }0 C$ {
{
) Y* ]; v9 g' R- O, M0 [6 ~- D   printk("release success!\n");: {/ U5 P7 I: W8 @2 o7 `: Q
   return 0;  a6 J- n/ p. Z' _6 P$ i
}( X* S* b% ?' K) A
8 }2 C  _+ J& }# O+ d3 w; R
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)2 e/ C  R! u$ u5 S( Y" N0 H
{
/ z( ^: o( {' h4 F# A' L0 y* g% A    copy_from_user(&DXR_data,buf,len);2 B4 U* d. H8 M3 i8 {8 Y
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       % L) [4 L4 q4 O6 u7 {2 t
    return 0;4 A/ [2 d  M6 ?- q" O7 K. B

+ g( G) V0 J+ @/ m5 G8 b}
9 N* n% k$ ^" z/ M. Z; R
2 A3 D: f, j) K- ustatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)' _* J; i1 L: o
{ 2 c6 P% B$ `* E
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
0 \. \' {* e6 d- h- E   copy_to_user(buf,&DRR_data,len);
+ R% y5 f+ t0 g! z1 K   return 0;9 f! {2 t0 J6 V. P5 j( S6 r
}% B! V$ P6 a! r6 I% t9 n

) z" Y0 [$ e5 s9 M- i2 @) \2 w/ ]0 F( G4 f+ K" n* B8 }" m
static struct  file_operations mcbsp_fops=- |+ [" d' k6 x  H) C0 Z) t
{$ n7 F. q5 c7 {' O
   .owner=THIS_MODULE,0 S" t/ F+ w$ b0 c
   .open=mcbsp_open,
( q; P/ x6 t" c* \5 T, S! \' F   .release=mcbsp_release,) _3 c/ P- {5 y5 x; @
   .write=mcbsp_write,
) ?0 c5 V! b2 x! l) ^   .read=mcbsp_read,
2 Q3 P: q$ ?* A( x  P};
" }8 T/ Z0 U4 r7 hstatic int __init MCBSP_init(void)
5 b, G% d" U- R6 [: O, S- U{
; i4 j2 S3 K9 I2 {   int ret;' j; Y  z7 K$ p! {! o6 W; s
   unsigned  int   PINMUX1_REG_old;
/ f1 X# D/ g- _0 _( u+ Z   unsigned  int   PINMUX18_REG_old;
# h# |- `( M  {5 f) x6 R) e  Q   unsigned  int   PINMUX19_REG_old;
5 h5 I/ V+ N( p' w6 x. W, A% r- ~   unsigned  int   temp;  ) _( G9 ^" V, K( z7 C0 v/ t; K
   if(MCBSP_MAJOR)
; R3 X0 T. a' M( \0 d- @/ ]   {; C4 Q; G/ w8 j9 Y# z+ @2 j
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
( h6 i+ Y* Y/ T. m  ?      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
) M; K3 I5 }) r8 V/ a3 u/ I+ @   }
4 t7 b6 _2 w5 w- Z' ~/ L   else4 \4 O% B5 v, ~% h8 T1 V" B
   {
" }* @, w$ L) v! f      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);! M. m  h1 Z) O/ j) o# a
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
, {4 N9 ?* U5 z( C, H   }9 a  D1 R. n2 c- z
   / ?+ h# H: b2 x7 p& A
   if(ret<0)0 K# a& A8 w* Z) o. Q9 r
   {, u3 v+ G, M, {. E
      printk(KERN_ERR "register chrdev fail!");1 j3 a: u" `. T% U" v$ x) E0 `
      return -1;) M# ?% ^+ v! m
   }9 Y' c: T% C4 y0 ]- @9 W
   8 _1 A# P3 g, @* ]
   mcbsp_cdev=cdev_alloc();8 H) {9 r2 Q% r
   
7 b, F& b% }% Y( x   if(mcbsp_cdev!=NULL)
& l1 U1 f3 n9 u4 X  D  y" B, R   {
7 L( o. Z! Z2 _+ e      cdev_init(mcbsp_cdev,&mcbsp_fops);3 T2 U- q; B( o/ f& D
      mcbsp_cdev->ops=&mcbsp_fops;  I6 A9 L3 r3 ~+ ^+ l) Q- j
      mcbsp_cdev->owner=THIS_MODULE;& q* O5 W" K& \  e3 F
      . h; _7 w) ]: h2 ], \& y
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
5 E$ L$ H) h( }# x          printk(KERN_ERR "register cdev fail!");  k" |: M; G3 D* G$ Z! _- i
      else7 m/ d8 M( |9 ^+ h8 M& x+ e8 j' `
          printk(KERN_ERR "register success!\n");
: ~9 N  \1 ]+ H2 s8 l   }
( V4 X+ u5 z) ?7 j8 ~   else* ~! P" M7 A& K
   {0 w8 |6 p' ?$ A( i
      printk(KERN_ERR "register cdev err!");/ u( _+ `8 X9 X& W
      return -1;+ t5 ~. Q6 h# ?1 s5 e0 k
   }/ h! n/ P9 [% }" Y7 W0 T" k. I4 Y
   + {5 f6 d7 U" m
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
6 B1 B1 E7 O, m" I" I   if(IS_ERR(mcbsp_class))
1 m' U: I# V8 f" @2 r8 ?/ O   {6 D3 V6 I* B  a) A
      printk(KERN_ERR "register class err!");7 t1 F7 _8 @* v' S( t0 ?
   return -1;
& n/ W( x1 [; M2 u5 i2 |   }
7 }: }; _  B+ B' `   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
3 a# k, {. @9 Z' h5 T" o( V/ Q, G- h  ?) @5 P4 ], i) b
   //PSC" R- d( L0 F, {$ I* n. J7 A
   //add Enable MCBSP
1 R- v) P# d) d- W- U: C9 M# y   //test
6 Z  o4 t1 f0 q8 I  \9 t   temp = 0x80000003;
* S4 e& V4 x6 m8 y4 X   writel(temp, IO_ADDRESS(MDCTL15_ADDR));; R+ A8 i( @& [9 K! A8 o# ~/ p
   temp = 0x00000003;
) k) d8 B4 S2 {* d" k   writel(temp, IO_ADDRESS(PTCMD_ADDR));  d# l7 w' Y/ a& l! t

( J6 S; i: F" I' X2 F$ L   temp = 0x001FF201;" |9 S8 N5 B; G$ w
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
3 a( d4 p) `+ V1 n, @   - o( O" [) |# d: \& s
   //PINMUX  6 X# w. G$ D' k$ s/ j( N7 ?7 q
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,; k- k# w! x  b* z6 N  T
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
. O, y! F' \" Q7 i1 |* J   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ) u& s+ Q. Z4 K3 j! y. f
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
' t: ~  G; }/ q  z' k" E8 Z   
' s$ M! G4 a# w: C3 a: q   //SLEEP_EN,EPR,L138_SHK1,L138_RC- l# l% I& n6 r+ O7 Y
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
5 i9 s: j+ r, J* |7 |% P6 x6 [   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   * k/ W- D. p, v
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
% S( p9 w7 v# y   r+ X2 E! l% B% a' y
   //RESETn,L138_SHK2
" p3 A) G5 _6 u1 |   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  $ \1 G+ q. @7 n1 r( ?
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
# Q1 L( d7 V3 q& b   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
: s7 B" I- ]3 E* L; d7 k9 B6 A
, P- S6 U; r! N" K9 g; t 7 z- O: V+ m! b* P* X- o
  //SPCR Register* x8 d9 i7 b1 E6 g( v1 X
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset6 O6 C. ~5 w5 j- l
  temp = 0x03000000;//(DLB=0)  R% i* X) @( o" S, h3 y* _
// temp = 0x03008000;//(DLB=1)" L- j  o. {+ S! o% Y. E/ V' `( k
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
/ e' B* V7 _! N' u9 P9 n" e  temp = readl(IO_ADDRESS(SPCR_ADDR));
( I6 G5 B( j; V1 d1 r  printk("temp=%x\n",temp);$ d4 n# m$ g  d% D6 H
7 S( P' p: B" s) s% z
   //PCR Register6 s2 d0 A# H/ W" P) m- k/ O: J
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
, e+ B! @+ ~3 ~. _# I3 t. |5 N  // temp = 0x00000F0F;
. }3 k, n! T. H% r  temp = 0x00000B0F;& l2 Y( h& ]1 o
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized + ]9 [5 {( E( N: u$ Q
  temp = readl(IO_ADDRESS(PCR_ADDR));; H$ Q% R" p6 d! [3 u# c/ I
  printk("temp=%x\n",temp);  3 p( Q  P) r4 {+ q' y
   //SRGR Register
2 I5 ~" ]' p1 U9 @1 P# b   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11! E; C  j6 d0 H
//temp = 0x301F000B;7 G0 K' s5 ~- z0 A# H
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
2 L& C5 P+ V! O; ?( k6 ]  temp = readl(IO_ADDRESS(SRGR_ADDR));
- n+ B1 P5 Z: T# f7 }3 B/ R+ w  printk("temp=%x\n",temp);  [& }: r1 Q; M& i/ q  y
   //RCR
( p6 _& q" a$ N# I3 d5 L   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
/ C3 F% h+ {1 P. o: Y! s   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0# v* g% D1 _% G9 |( ]! D, J
   temp = 0x00440040;" d; R8 Q* X: N
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
9 U  ^* k' d; l+ k+ ?- B   temp = readl(IO_ADDRESS(RCR_ADDR));
% h& S6 i! P- w4 Q* x   printk("temp=%x\n",temp);7 `% {( R. B2 H9 Q: d3 n7 Y
   //XCR
; q% F) Z; p$ P, y5 a, u   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-14 k5 Z8 Q' s+ x& z
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
! R' o9 x8 l) u! t- |/ v   temp = 0x00440040;( W7 n/ N$ l5 e0 I! Q# t
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
( |! Y  z$ y7 o2 i: o8 b   temp = readl(IO_ADDRESS(XCR_ADDR));
7 n- o, A. V: C, Y   printk("temp=%x\n",temp);
: t0 y1 ?# @" ~) L8 U3 l" I  udelay(100);9 u  X& |. @, |) {$ B' s) u
  //SPCR Register
+ k5 d/ v% |$ ]+ a' \0 z  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
# S% v- b& e- E2 k  q/ ?6 Y5 F1 k  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
( N& _1 `8 d. N4 c& A# N" u: P+ c  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled; T% ]7 J8 ]: f9 G' Z
  temp = readl(IO_ADDRESS(SPCR_ADDR));
* t, W$ q: v6 L, K* u  printk("temp=%x\n",temp);
! v0 @: z$ e& Z! r. L  T  udelay(100);$ b$ O& O! e4 [

7 @& K1 s8 R5 l% i2 g  //set GPIO direction2 `4 Y8 }% x! A% S; h0 V: ~- N
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
% K! T! Y! E: s- a& u/ x4 i9 K* ?   temp = temp | 0x00000100;//EPR----input
% ?* @1 E7 X$ j( J   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
# c& w! g( [# `/ o   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
: y( g" C) O1 \2 j; G
* ~( g# M7 ]+ V  c   return 0;
0 x' v1 g* h: `/ `, X}
) }+ C) J5 k, ]; E/ [static void __exit MCBSP_exit(void). ?) w% v2 f/ [( N) Y* E* Q
{8 \& M" `. q# S& E& i2 r
   printk("mcbsp chrdev exit!\n");- q' T- ^2 {0 n# `' S- j% I
   cdev_del(mcbsp_cdev);4 R, ?: F2 ?  u4 u1 e5 i0 f! g
   unregister_chrdev_region(mcbsp_dev,count);
0 h; n7 c$ |" d2 B# T8 h   device_destroy(mcbsp_class,mcbsp_dev);6 F* D# h, }7 D
   class_destroy(mcbsp_class);5 ]* w. [, t6 C" h' b; Z
}. L3 b/ O$ ], z
module_init(MCBSP_init);% b7 o4 V9 v( ~2 l6 m& |
module_exit(MCBSP_exit);! Y, p% I! o7 n# t- i4 I7 y
) k  @/ G, m) o& u0 {4 P, {
MODULE_LICENSE("GPL");
9 n* p6 m) J3 V: I+ X) w
5 |* A; f  w3 F5 T1 c  w我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
% y8 X4 z7 r8 ~2 i- V: C& I, }& ^我的应用层的测试程序如下$ g8 G; i$ o0 j8 ~# v0 d
#include <stdio.h>0 R9 H# Z5 d; A2 G4 X; O
#include <string.h>
3 `, {1 q: f- j#include <fcntl.h>
+ C9 s: i& ]' P, U+ q) g9 ^#include <unistd.h>
! a! t4 a# ]% K  N* L# u; a2 C#include <signal.h>
5 y$ }$ r* E% p9 o4 \. I" ?+ `2 z9 a#include <pthread.h>       //线程1 I3 P: J1 ?9 J; @2 C1 P7 ~
#include <stdlib.h>
+ ~! ?- R% z8 ~+ t! h# T#include <pcap.h>          //捕获网口数据! C+ Q, \$ n& T* a" ?' O
#include <semaphore.h>     //信号
9 E" Q) n6 F. B4 j+ ]6 X#include <sys/types.h>     //消息对列7 X( ~+ T. z" r% Y6 d
#include <sys/ipc.h>       //消息队列
; X/ `' q6 B9 @4 s( W/ ?  k* ]  q#include <sys/msg.h>       //消息队列4 P/ Y' \/ C% p& `3 T
#include <sys/select.h># o  ]  x. L9 v0 _: m" t+ d
#include <sys/syscall.h>
; _" R$ E) _8 e7 D1 r0 ~# Y' j#include <sys/stat.h>
8 i7 \+ S; @8 h, R: V6 }' Z#include <sys/mman.h>& f2 l( G" `' ?6 B/ g" M
#define msleep(x) usleep(1000*x)
3 o0 E: |3 ~* ]+ Y- C7 e5 M7 l. c. o9 o0 j
int main()
/ Q$ H, s9 U* W: _" N: ]+ ~; I, W{ ( f9 P' v3 r  G2 [+ K/ ^
    //MCBSP,ARM与AMBE2000交互设备
1 {3 T1 R* T. l3 K: r# J0 u* C int fd;, \" ?9 \7 h  ?. d( X: z( K* ?# t
unsigned short data_write = 0x5555;; n" x6 d# `& A/ u
unsigned short data_read = 0x00;
: L. c1 q" Z0 a2 }( C% |7 z  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);& J9 d9 u7 H$ ]" F% p7 ^* L: X
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);: M( H' v  h! x( X2 Q/ t0 A3 N
    4 p1 U; L3 q- W1 [# k  y+ `
  if(fd < 0)
7 g& t9 w! p0 W' l  {; j- d7 l  {  s. j5 R6 {. E% c9 O  n) P- T
     perror("open failed\n");
& w2 ^+ X: u) o     return -1;
, @- r% \) P3 g3 {  }
% F+ |# T8 W+ }1 X, S0 x  L  
& ?7 O, |, U, }; n8 H  while(1)
) a5 v9 T. N- q" B% ^) I* W  w  {
% X' c0 \; ~1 v* h- s   
/ q+ |1 Q) X- N! `6 O9 b   //AMBE2000每次读写是24个字为一帧
7 t/ a- ^+ I3 P  S5 n   //写数据时将数据在底层存储起来,等到中断的时候再发送
! m8 A2 M% N& |! j   //AMBE2000输入数据是以0x13EC开头的0 p- s# K4 c- ]9 g* b0 x7 ~* A
   write(fd,&data_write,sizeof(unsigned short));# c9 r2 K  P$ P$ _. J
   
7 q% A) M6 R+ P* u- ~) H   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
2 S$ a2 I( R# U" N   read(fd,&data_read,sizeof(unsigned short));5 W5 l' X$ t! G3 l
   
; i5 }1 I& K& N% g  y- s8 U   if(data_read == 0x13Ec)
4 G. C% _7 t. r9 D4 k1 X, x   {
- ^% g7 U8 ~( K/ K( ^. t8 t   3 i1 l- L1 e8 x4 H+ G: X" K
    printf("data_read = %x\n",data_read);
" E1 l, \+ J( J/ V* J; Q9 I   }4 P8 Y" g6 f! ~+ G% x) S# I
   
, }5 n' B7 T. c3 @# q! G   msleep(10);
+ b* u+ C# R; e5 d0 s* c8 c- i" T  
, Z$ ^/ D( ~3 v0 K  /*. S) G8 e/ ^$ N9 A1 ~
   ioctl(fd,1);   5 @# R: a0 f& k- k) m
sleep(1);0 J% ]0 h; W- e  _
ioctl(fd,0);, D7 c+ o/ f5 g
sleep(1);
( e5 _  P( S# \! W+ v1 i- u. E3 i */ / J) Q% Q& M" o  }# g
  }   : g6 n+ B( T+ T( N$ L
return 0;, N2 Q- k/ d8 f* d

$ C8 P8 B1 Z) \. P$ I}
) |% ^6 x5 O  `# W# t' b* \5 j; A0 G
多谢各位指教,谢谢! 急
* n( D& ?3 e8 ~9 ^. C. Y# J$ c) ~* f% \% D4 h

# r: _4 G2 F$ ?! {  i5 v7 i4 a* u* G& O4 o8 z# N7 }$ s) z
$ x8 u/ g2 ^- I; e

9 x$ e$ q. ^- K; E7 T  A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 19:47 , Processed in 0.049175 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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