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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: . e3 q6 x7 x& s! U& j
/*; y- q7 K1 S4 W
* Copyright (C) 2009 Texas Instruments Inc' E9 p- B3 N) u+ s& S# l9 |
** ]# {- q( x) c! `# F
* This program is free software; you can redistribute it and/or modify
" p/ i! U5 v( D * it under the terms of the GNU General Public License as published by% y; X4 c- g7 Z5 H; v& j9 `6 V, q7 }
* the Free Software Foundation; either version 2 of the License, or: D" a7 Y. q# i+ H- J: a
* (at your option)any later version.  J, C6 }0 ~& s7 \. I0 s, @
*
! h& y7 u* q: c, L * This program is distributed in the hope that it will be useful,7 `/ C% r% Z/ A% L) d$ R
* but WITHOUT ANY WARRANTY; without even the implied warranty of. b3 ?) B: [$ ^7 B/ \* q9 N  H
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" s  _# s3 B1 L' @( _; \! L; p4 \
* GNU General Public License for more details.
, c7 _. s2 J% c" \  u# e! L *
0 t$ e& d! g7 e1 o5 l. O * You should have received a copy of the GNU General Public License
, i& I) p* S" B4 u/ W * along with this program; if not, write to the Free Software
7 N# w: i4 p3 j3 A * Foundati
9 L) z# }, p5 {# U/ j/ N*/
' m' i# J4 u' ]+ O% g' ~#include <linux/module.h>
! v% ^4 ~% M- o" ~8 G#include <linux/init.h>7 l( ?2 }8 j. ~! G' C9 O. w! p' O
#include <linux/errno.h>5 b. ?+ \; g3 U' h, E
#include <linux/types.h>
9 p! l3 h! M7 r/ G$ f6 G1 T#include <linux/interrupt.h>
7 ~" |) p# Q, y; d9 `#include <linux/io.h>
8 r3 e, c+ }* ~8 H+ j#include <linux/sysctl.h>
. N- `# k4 U* E4 t#include <linux/mm.h>
1 B: w4 N. y6 i0 h8 ~#include <linux/delay.h>! G- K+ d- p( v* V7 c
#include<linux/kernel.h>
# k: l  @3 Q  V; ~#include<linux/fs.h>
6 C. f. A4 E8 p  i#include<linux/ioctl.h>  G( t3 s  k8 ^- j+ o1 ]: k
#include<linux/cdev.h>- v& b! ^" N2 T
#include<linux/kdev_t.h>2 g  I! J. ?* Y& U% D# X4 R7 H
#include<linux/gpio.h>) Q0 K, I# u! z
#include <mach/hardware.h>
- W. ]- ~8 i" o/ y+ `9 _0 U, S, Q% C#include <mach/irqs.h>
, X/ I$ j7 E, n, k. I2 B$ i8 g% z: k
#include <asm/mach-types.h>9 B" [. `$ `3 H9 F8 [. x- D( y& D0 s
#include <asm/mach/arch.h>
# U" a+ J  J/ X; d; |0 s% ?5 }#include <mach/da8xx.h>
( s, w  d, Y( p- l0 ~#define  SYSCFG_BASE   0x01c14000
% Z5 O# v7 Y+ e3 m( \: [# }6 n#define  PINMUX1_OFFSET   0x124 + e$ D4 {( a; t3 u, v4 s
#define  PINMUX18_OFFSET  0x168 0 V4 }6 x/ ~% K; c. N
#define  PINMUX19_OFFSET  0x16c
2 v. M3 G7 @+ w7 B# I- D" n#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR% r7 V: D4 T, U( w
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR+ x5 K: I/ ~) M2 o/ u' ~# c
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR: ?4 R' S- W  M& w: F' i+ T
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR% e0 i# L, h+ N( a! Z
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
* V, r9 n% n3 P                           
  E: M- g1 R! f1 b0 q. C#define DXR_ADDR      0x01D11004  //MCBSP1_DXR+ e& Q- o/ H, e% K4 n
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
# {- t9 N4 q' n+ R  J/ L) ?4 o//PSC
4 c9 ], A: G# S' U. g#define  PTCMD_ADDR   0x01E27120  8 q' y! t/ b& m
#define  MDCTL15_ADDR 0x01E27A3C# _/ I# T# Y$ l: x; e; b
#define  PDCTL1_ADDR  0x01E27304
1 N  B# ]5 |1 }% }7 I3 H. k//GPIO8 direction6 s: V( u) {& ^. @
#define GPIO8_DIRECT  0x01E260B0
+ ?* p, {) q! Q7 G6 [) \3 G) n#define GPIO8_OUT     0x01E260B4
& ~5 p% A% k; }& f" ^#define GPIO8_IN     0x01E260C0  n6 F# N5 T9 m9 Q) Q! p! z
( X$ `: @/ _1 D
//#define MCBSP1_RINT    99              9 h( X( B/ ^1 D; X) Y% M
//#define MCBSP1_XINT    100  
; A' G! u3 _6 \static int MCBSP_MAJOR=239;5 u& }& N: d) a5 ~
static int MCBSP_MINOR=0;
  [6 I# O* U& r" k" s0 X9 H1 \static int count =1;
6 l1 A3 e* Q/ U8 q' W+ L% m
2 p9 q0 w9 h8 I# f* z- s' ^2 l#define MCBSP_NAME  "MCBSP-device"5 p2 ~- A( g3 e
% @1 ^% a# U/ Q7 u6 J, m$ W& {
static struct cdev *mcbsp_cdev;! A; N+ d4 C  Q+ R" ^& a
static struct class *mcbsp_class;7 h" Q" L% Z/ O# v' y' K; }
static dev_t mcbsp_dev;
5 ?. n  I9 `4 d+ q9 nunsigned int DRR_data;
" `7 }3 A, e, Yunsigned int DXR_data;" S4 j$ }4 s7 ^
static int mcbsp_open(struct inode *inode,struct file *file)
8 [, M9 |$ t4 ^1 C{0 j2 r5 |, Y3 B4 V/ `. q; b
     C' E* u( O: e
   //interrupt enable,initialized2 @/ R9 t% ]( K6 F3 W
   unsigned int temp;! ]/ J  |3 c1 \  i
   //SLEEP_EN(GPIO8[10])---0
; o% j5 p3 J' q+ r4 G% I$ }   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
6 O' g5 a2 ^  U0 V8 }   temp=temp&(~0x00000400);
9 |  C( i3 G3 U! X% {1 j   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
" C# m% p% i) |% R4 q6 m  //RESETn(GPIO8[8])----0----1# a- }* ~/ O/ s
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% N& j2 `( Q5 ~# j3 p1 r4 ^- U
   temp=temp&(~0x00000100);+ s1 J9 }$ k% U1 p( k9 k
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---06 a; o2 Y. z1 ~% K/ O9 F
   udelay(100);
' [( z/ K% g, J; Y- _$ G   temp=temp| 0x00000100;
$ Y- Z' A4 F+ A4 `9 k. f, B   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1$ B5 a1 A4 T1 c, y9 h7 E, R9 @
   udelay(100);( [  Y" j/ u! \. G
   printk("open success!\n");' y4 t' e' d) `  o7 i# @5 H
   return 0;
; x( z6 W) o$ h8 c}' s8 _4 u5 q2 F! [! x1 ?
6 B% N( M8 N7 e* J$ `# x( d% q
static int mcbsp_release(struct inode *inode,struct file *file)
1 y; R' _0 k; X7 w1 Y; y{8 n8 l/ ]( a* |. _/ Z2 M
   printk("release success!\n");
* E* G% v1 ?" ~- S   return 0;
, v2 h" O/ f* o}: p5 Y5 }3 i9 i& a" G; j' Y

7 W  h. ^! g9 ^# W) S0 [) l  \4 Vstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)9 h, \4 i+ W2 L) g* z
{& O. Y+ `" i6 u/ V
    copy_from_user(&DXR_data,buf,len);
6 g' Y, n" A8 d" X: F, O    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
# W4 l) v- I0 _7 U* F" I3 K3 p    return 0;
% |! c4 e. F! }# A   Y" m& ^* v; c' O( t
}
$ B" H8 h- @& [) r2 l# d# k7 A: l
  w! M5 _" Z& Y' A- e, g- ]static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)& Z/ ?# o' z4 q; f0 \0 b
{
7 K/ h8 E4 _# V! }# w7 A/ a& M   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
/ a9 {, @8 l, N" X# [   copy_to_user(buf,&DRR_data,len); ! P1 L# U5 P% `0 L
   return 0;
& v3 a& n5 G2 }}2 S4 t8 {; e% g+ g9 ?6 z; N# Y

( ]/ C% L7 E. l5 S
5 g' E* d4 e. K/ ^( ~- Istatic struct  file_operations mcbsp_fops=, K5 Z+ b9 a, d' t
{% Q# \3 D: F5 P, V7 u% g* S3 i+ Q
   .owner=THIS_MODULE,7 c( e, ?: ]- _" c
   .open=mcbsp_open,
$ I/ O9 ~% i8 X5 ^1 L- V8 ]' ]   .release=mcbsp_release,5 M; k3 v! C5 m! G
   .write=mcbsp_write,
0 s) ?  ?# i$ Y! V   .read=mcbsp_read,5 N, d1 U" v; O! u
};
  D6 w; M5 u1 t8 w% I' Wstatic int __init MCBSP_init(void)! K" d+ M1 o3 Q) C, M
{+ O: r% H) E  b& K
   int ret;. c/ u7 {( V! A2 w
   unsigned  int   PINMUX1_REG_old;
& A  l* \/ v7 s$ \$ n9 ?   unsigned  int   PINMUX18_REG_old;
# h$ \: j3 z8 ?& }2 T   unsigned  int   PINMUX19_REG_old;0 {/ b1 Y! u8 r4 r
   unsigned  int   temp;  
& r* _9 ]3 ~  J  o( m; V   if(MCBSP_MAJOR)
3 l1 h3 Z  X9 ?6 u- X0 D   {
/ N& q; g/ T; d" K; A- _4 v      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);1 F4 ~9 {6 r9 c; P* v4 J% ?2 `
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
. o. p2 ~6 V! U& e' a& z  A- P   }
" f/ d6 I4 j1 }' o$ W. [& M   else
; i. D! i5 T% R1 D. C) f   {: C* j# o! X) m$ o! j  E
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);. N* Q5 d5 H4 d
      MCBSP_MAJOR=MAJOR(mcbsp_dev);- w/ ]5 F1 ]3 r; c/ E& w1 C5 q
   }  T7 c! X, B0 s/ L
   4 A5 B9 w8 Y; J' w
   if(ret<0)
: o3 F+ @% P; N+ @4 \$ S   {
2 M1 K: K( q: ~: `6 ~$ z1 s      printk(KERN_ERR "register chrdev fail!");" c9 B( M' S( d2 `. [: z
      return -1;; n, i& W- p* h9 Q& y8 |& k
   }
9 n# n' A$ e- _6 s( a! G   9 \6 l$ j- Y5 M8 g
   mcbsp_cdev=cdev_alloc();
6 `+ Y: T; ~6 ~, W   - @0 ^+ q0 }. k2 u9 X* v. V+ V2 ?0 Q
   if(mcbsp_cdev!=NULL)
! x4 v% L( u3 l& F2 I& w! I   {
. L; G4 i# \7 S# J+ h0 u' Y9 _      cdev_init(mcbsp_cdev,&mcbsp_fops);6 [1 V& [  c3 ?7 e
      mcbsp_cdev->ops=&mcbsp_fops;
/ \& h8 L3 L+ P1 N0 u0 O* _$ O      mcbsp_cdev->owner=THIS_MODULE;
4 }8 S: P9 Z2 g( J7 \      # ?8 \( W0 L8 ~9 g
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
8 K3 W  R, T) D4 r( G% x          printk(KERN_ERR "register cdev fail!");+ v% D/ e6 B: A  n
      else; c2 G( K, r+ j7 H- B" B8 D/ }9 X
          printk(KERN_ERR "register success!\n");
4 `0 H2 X" o  j/ h0 C6 }1 ^   }
7 I' k' {& {. }0 ~   else
$ E  x% C6 x- w9 U- Y1 \   {& Z2 R6 R+ B% [8 _
      printk(KERN_ERR "register cdev err!");3 B& d, w* Q" V* J( ?& S
      return -1;+ \0 A$ w' ?  F9 V
   }
' V8 U8 m  G# p- N! h: P) e# Y   
8 j2 l8 G% |9 w3 n5 k  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
+ o6 x: F, s8 t8 [& o9 O# S- J   if(IS_ERR(mcbsp_class))6 r0 S5 M6 A! U5 I
   {- ^: }6 o- G1 ~* Z8 x* d
      printk(KERN_ERR "register class err!");( ]# a. y, @4 i+ U0 t
   return -1;7 F* s- J# f6 x; c  ~7 E
   }5 o# a: x; j  l7 ^
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);  E" Q; ]6 |( q" J
- {& b" B3 G! I; x& m1 f4 H  e
   //PSC
; w5 _9 c. X7 w" L* ^   //add Enable MCBSP
. q! \, \/ N0 d6 p: [5 M, L   //test1 X$ B  a4 x" e! b( U
   temp = 0x80000003;/ T0 H6 d9 _1 c$ j' x. a
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));* g0 l3 f, u/ ~5 C
   temp = 0x00000003;
$ W, }9 i9 d) Q9 A; K$ [% V   writel(temp, IO_ADDRESS(PTCMD_ADDR));
0 X2 [5 b# [2 _1 ^ $ p+ |) Z2 ~0 i* I& r% ]9 p% o2 Q
   temp = 0x001FF201;* }* P& p. R/ n% `
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
  y$ R# x% J& a   
, a1 g# m* Y' y' K; Q   //PINMUX  
- ?. Z9 [! e2 s* k4 j5 {4 O: C   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
+ ]2 T6 J5 y3 ?   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
2 r) D# \/ R, A   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
/ _; P. ^6 f# B8 S; C   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  \0 y% o: ~4 F; e
   , E& Z: `# b8 ]# v6 x0 u
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
6 R' G# C  S) [1 b1 l6 L   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
9 M7 z0 L0 z* `   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
; j1 d  @0 R% e( J) t   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
6 A/ z  R1 |' ?/ b; z) Z9 G$ T 2 y) |- A6 }' `; M4 N4 h
   //RESETn,L138_SHK2
3 N6 c( _2 a, c; @   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ! X; G* Y" b. a! m3 J) o
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
: a' h( e$ K: [& B1 }   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
% J& @% U! L( E4 k5 \# K7 Q. q # V0 E! o0 q  a; G* H0 ?' O0 ^8 [
' [/ m2 }5 w0 o. @6 N) d1 U
  //SPCR Register
, J3 _" v+ [2 w  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset+ `# i  ~; l/ P8 j( s
  temp = 0x03000000;//(DLB=0)
$ U  i* X8 ?$ x6 t // temp = 0x03008000;//(DLB=1)* Z6 J+ w$ j& ~; I
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset. K# m' K5 F- T( V
  temp = readl(IO_ADDRESS(SPCR_ADDR));* D+ W9 ^$ y' K. ^
  printk("temp=%x\n",temp);: f4 C" u, I# h8 _3 H+ q0 M
" j( U/ L3 g' @* `+ m/ W" D0 y. u
   //PCR Register
" S7 p4 |+ Q6 F# d5 G   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
4 H) e" x8 g0 p3 u+ _* \0 Z5 `  // temp = 0x00000F0F;- O4 \& h2 `, i1 `1 [" B- _/ n9 N
  temp = 0x00000B0F;8 l3 s% P2 N" e7 `" u, V; t, i
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
+ W7 h( x. B1 J6 J  temp = readl(IO_ADDRESS(PCR_ADDR));0 ?7 x( ]1 y6 v% {+ g( }+ R
  printk("temp=%x\n",temp);  
) ]: `$ M. K1 e) D" \: h6 n. k   //SRGR Register) {* f8 K5 t5 W, `- e; D
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
) t' f% a. V$ f- P3 E //temp = 0x301F000B;
3 t( q7 Q/ J1 M7 F2 L7 |   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ( t8 \/ J' H* e' ^( a* ^$ y) U
  temp = readl(IO_ADDRESS(SRGR_ADDR));8 L4 Q8 R( r8 v5 Q/ h
  printk("temp=%x\n",temp);$ g* C! m6 q. e5 T  V6 v6 e
   //RCR/ t7 M# _5 i; q, a
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
+ E+ c! u3 ]  u; l0 A   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
. Q$ R7 R; h  R/ E& T   temp = 0x00440040;: r# h! Z; H1 h5 S- v+ c
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized     m/ A# T. R' {  e) v" ?
   temp = readl(IO_ADDRESS(RCR_ADDR));
8 g' U4 ]: B) }) h4 o+ b   printk("temp=%x\n",temp);8 C7 [; V5 P# \
   //XCR
3 R5 ~1 u; L; Y% A, z   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
7 k5 n( q4 ]: {1 Y  I$ p8 q9 m) V   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0& `4 X! L: C% I6 M3 }, {
   temp = 0x00440040;( ]- s  U7 |" g6 k; u
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
2 c- x+ I& O( I" O   temp = readl(IO_ADDRESS(XCR_ADDR));# _. k" X+ T( s; @: @# y+ m  s
   printk("temp=%x\n",temp);
( [/ q2 s" z6 Q9 s) o7 R% E  udelay(100);
8 B2 p  t6 C+ M! `; q  //SPCR Register9 {) n" ~. g* D: Y
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
* s0 z' c& z) [3 `/ O7 |  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
9 n; J6 ?' K% @; R9 ?% u  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
) K+ l7 u/ `8 }4 @+ A  temp = readl(IO_ADDRESS(SPCR_ADDR));6 v; Q6 F. {* w. k1 s5 G3 U
  printk("temp=%x\n",temp);5 x1 e+ _! u' \
  udelay(100);
1 s# ]6 u/ ^7 g9 E# m9 I3 ^! {/ }( o6 Q) x; d$ J8 r
  //set GPIO direction
" U1 h5 ?- u3 p5 q, d   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
) b: i) m3 K8 {) I   temp = temp | 0x00000100;//EPR----input# ]: @8 T4 q! C1 f: ~
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
, Y+ ~' q( ?( o# p; Z% n   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 7 e# C( e; s0 F1 L7 q/ Z
2 v) ?# [5 Y  f+ C4 Z+ `; u( W1 K
   return 0;% r0 \& l0 }9 X2 T
}5 p8 E! V$ i$ _7 J1 \& T& |- c' Q
static void __exit MCBSP_exit(void)) `% [% N& I4 @/ S/ w
{
0 L2 _  z- j6 W: I+ j6 D0 B; S1 _, Q   printk("mcbsp chrdev exit!\n");% ^. i" q( ]  C9 _' H8 J! n9 s
   cdev_del(mcbsp_cdev);/ W+ C$ R( o# R) |/ {4 ~( W( F* i3 I
   unregister_chrdev_region(mcbsp_dev,count);4 I" _4 W3 c2 l& K' f6 [
   device_destroy(mcbsp_class,mcbsp_dev);2 e& [- w. r, M7 g. D
   class_destroy(mcbsp_class);9 }6 j* ]$ A! X5 ^$ b' ?
}
# E. }/ d6 _  x/ q# hmodule_init(MCBSP_init);" z* ~. b/ a8 d/ d2 F: j& Y
module_exit(MCBSP_exit);. T( k  t: d' o2 l  W! |* ^: E5 G& m

/ f5 b" L% l( [+ i( ~, p2 R# BMODULE_LICENSE("GPL");
7 g0 S( n& K9 ~! A3 Z/ I; O' k  q$ b2 R0 W1 e, G; s
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
4 g/ p( U5 W9 p) S' E我的应用层的测试程序如下) v( ], q4 P* ]9 ]
#include <stdio.h>
1 a6 r/ U, J; F# H#include <string.h>
% _" w5 Y; i0 ]: X. a! l3 I#include <fcntl.h>
2 T1 h. o" M, ?( J, C8 r#include <unistd.h>
% x" a" r* H6 R! F) r* K#include <signal.h>( }: u) j  [$ ~. ]6 q0 H9 V
#include <pthread.h>       //线程- D% H5 P: N& z& `6 ]7 C' E& |
#include <stdlib.h>
+ r. ~& q0 p  _#include <pcap.h>          //捕获网口数据
3 P" g% K- @. j/ `* h  v#include <semaphore.h>     //信号3 u& D: B% q3 b2 r* [
#include <sys/types.h>     //消息对列" N6 A0 S, q3 |/ S/ ~
#include <sys/ipc.h>       //消息队列
6 T. M5 q' m& ~! \#include <sys/msg.h>       //消息队列
+ u1 K: n2 K! j8 u/ l$ d  u6 B#include <sys/select.h>6 ~5 h2 p1 h# n: `% w# c( m% y
#include <sys/syscall.h>( c+ q" A. D$ u4 o
#include <sys/stat.h>8 i4 _% L1 l  p
#include <sys/mman.h>
4 @. I  p& k& B8 q#define msleep(x) usleep(1000*x)+ b0 o8 R& y! O" ]
- s( l+ a- i: E$ S% r7 P6 o
int main()
+ O2 }8 R2 O2 _{ 5 ?. V: |: C4 o2 n
    //MCBSP,ARM与AMBE2000交互设备7 ?- ~/ L3 G/ R' m. C; u5 E
int fd;3 O5 ~1 }& ~7 Q
unsigned short data_write = 0x5555;$ x7 K+ p( U& y+ q3 @$ I- C! |
unsigned short data_read = 0x00;
% \6 Y/ l' Y; ^: [* r' {  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
$ O8 D. Y' A. w9 x //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
- P( l' ]3 |  J. C9 w   
( ^7 X& m/ |3 [7 ]1 W  if(fd < 0)  s2 ]3 G5 j' Y, e
  {' k; S2 ~: C" w# ^. a- X
     perror("open failed\n");
, B% p8 k4 t9 ~' v' [; k     return -1;$ Q5 K8 F( A5 _: ~3 m
  }9 C7 M% H4 J0 i6 O
  
7 x& E5 X6 H+ i  while(1)
- o3 g* n: Y, d) i, j# s/ ]9 y  {
& E+ F, I9 S1 l& s   
: y4 A+ Z" c1 C6 l2 g- z( U   //AMBE2000每次读写是24个字为一帧1 T: p9 o5 N+ H* _2 V
   //写数据时将数据在底层存储起来,等到中断的时候再发送
& h1 S3 i, m; _+ j) l9 K   //AMBE2000输入数据是以0x13EC开头的
9 ?; e6 Z4 E  [# o) Q- F   write(fd,&data_write,sizeof(unsigned short));! e3 ]- C1 D8 x% y" D; A1 G
   
+ A# ^, N0 M/ J$ k   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
; Z+ F# Z2 @5 g& c   read(fd,&data_read,sizeof(unsigned short));+ ^9 B! m) w4 d& B* h3 @
   
1 e$ }/ [. u, o8 Q, _( z   if(data_read == 0x13Ec)5 G+ C8 z$ r+ T, P  l) Z- J
   {
$ s6 v4 d2 I4 @+ j9 P   7 {4 i3 \" b  C$ p% F
    printf("data_read = %x\n",data_read);/ ?% x3 e$ ^( [/ t
   }
* a' L6 y; t; W! F3 X9 J7 y   
+ c* O. ?( Q% y, `) ?   msleep(10);
0 ?6 }% M0 K% l. v  
/ j: {! y* v+ c3 N7 I  /*
) r7 G1 |$ A9 O4 P/ K/ v9 O   ioctl(fd,1);   7 w6 ?  d' f4 X9 }
sleep(1);* \5 q  }- W7 e" F, S
ioctl(fd,0);( q4 w5 x  O! X" i' C
sleep(1);9 m5 e) c& K; c( z' k
*/ 6 z6 X: K* Z( d% z
  }   
" O4 E: y8 ~  M! P  w1 x return 0;
9 O5 w- K8 }3 l) a
: @' I1 ~' ~% r- p$ v& B+ C7 t}3 `. K. s; ^' r0 s0 p' O1 \8 x

/ f/ |  p( {# E" P2 L: u5 B5 p0 K3 n多谢各位指教,谢谢! 急
# _6 o& b" o2 K9 U* @1 w
, p, ?1 p% ]$ S8 K& b& ?/ f# |: Y* E. ], K* _

: c# x3 M' H% P8 J; x
, G" Z! v, f3 O- O( g& }
6 i6 w. O8 I, _+ }' V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 16:53 , Processed in 0.048462 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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