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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: # n" H/ w! f3 {# A2 ^7 e1 Q
/*8 c) I% q, P* P6 f7 v
* Copyright (C) 2009 Texas Instruments Inc! }9 C0 x8 m+ d' G+ V8 D
*
0 @  ]8 ^* H: S9 [- ~' G * This program is free software; you can redistribute it and/or modify6 d7 s/ W9 w* D* l9 ^  t& Q( [
* it under the terms of the GNU General Public License as published by; G8 X  r! H1 `2 H
* the Free Software Foundation; either version 2 of the License, or
5 Z* p  [) E& r7 \5 x4 | * (at your option)any later version.
6 Y( H7 M% X5 k; N4 _+ B; s *
5 E3 A$ v# o9 V$ p% T9 `3 D * This program is distributed in the hope that it will be useful,
4 }: b& w4 w, A2 q4 t * but WITHOUT ANY WARRANTY; without even the implied warranty of+ D; O5 z: M9 _; Z, L
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
$ Q. W8 D2 z& I& h1 o- A * GNU General Public License for more details.* ]/ {% B( I/ A, x3 ?3 [
*
9 ?8 B  ]% ~3 U4 e& p" V; A * You should have received a copy of the GNU General Public License, t$ I+ s6 Q+ D0 b9 B3 B, O
* along with this program; if not, write to the Free Software7 j9 V$ E" O, ]2 a
* Foundati
9 W% C/ s2 p: @, ~6 _; m8 \- ]*/
# ^& \  U/ z. x- R# h8 {#include <linux/module.h>$ W  ^5 B% G- b1 Z. X) S" |$ g
#include <linux/init.h>9 m8 w4 `3 Q+ Q3 ~4 K$ G9 P- s
#include <linux/errno.h>3 L. Z5 ~. }$ Q4 u7 r* W: U
#include <linux/types.h>
# y4 Q2 K- z' _3 n) o' U#include <linux/interrupt.h>
* L1 }0 t  q: Q2 ~6 P4 g#include <linux/io.h>2 H5 b8 P; o' X% }8 A$ G) m
#include <linux/sysctl.h>$ c, r7 ~: I; M, B7 P% S
#include <linux/mm.h>3 j# z. U5 y5 n3 B3 c
#include <linux/delay.h>) a. s. ?2 D. \1 W" u
#include<linux/kernel.h>& X5 Y  A* ~/ Z" t9 l
#include<linux/fs.h>/ B- u5 @. v; t7 N% c' g
#include<linux/ioctl.h>
/ g  J' F0 k1 p2 J( i8 R#include<linux/cdev.h>
* m2 i/ b; H+ ]9 r, ^#include<linux/kdev_t.h>
* @. X: c/ |! j0 i#include<linux/gpio.h>
9 L* U; Y, w% v) E! q#include <mach/hardware.h>
$ P0 y& E; K+ I0 _#include <mach/irqs.h>8 u) i" B( i8 E7 k5 s# S

( w* T0 k( g3 B9 ~5 _6 {7 m- ^$ I#include <asm/mach-types.h>
& G# v0 V- c2 {7 U/ M" m9 @4 ^. B#include <asm/mach/arch.h>
& D! j. U( P* n& a/ Q3 ^#include <mach/da8xx.h>2 D/ G5 R" a! v5 y9 A' f
#define  SYSCFG_BASE   0x01c14000" Q0 @! k0 X9 J, ^6 A4 y
#define  PINMUX1_OFFSET   0x124 3 G9 J7 j, y* S# ^& D. r
#define  PINMUX18_OFFSET  0x168 . W. W! e% b1 o
#define  PINMUX19_OFFSET  0x16c4 ~" p2 o3 V. u; M0 F
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
1 L/ ?8 C* j; P3 v#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR# b' E) p2 F$ X7 X6 t
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR+ W/ ^6 W7 W  ^, \+ O; n+ W
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
' C$ S4 Y6 p. ~- ~" R3 k! M8 K9 T#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR* ^' b& E. s; M
                            " b. B3 n( x8 z/ o! k
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR+ N- C# f. L* Y! H- c5 f
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR1 g* t- Z7 @# a" O  A
//PSC
2 y' ^1 N/ I! B8 Z, w0 }# M% o& a4 C#define  PTCMD_ADDR   0x01E27120  
) ^  V9 t9 G7 \#define  MDCTL15_ADDR 0x01E27A3C
8 Q4 y# }4 o. v+ U: \) _$ P#define  PDCTL1_ADDR  0x01E27304
9 H# M& d/ O3 v$ ^; V4 H; Y" B//GPIO8 direction1 K7 j; i9 T- P% {* N
#define GPIO8_DIRECT  0x01E260B0
5 v* S: U- ?& m& r* V#define GPIO8_OUT     0x01E260B4
, B* h, O" T4 z, |; }4 q5 E#define GPIO8_IN     0x01E260C0
$ R7 N8 _8 g/ {/ d+ n4 I1 E, ?2 G) `% g: C' W( o- k) P
//#define MCBSP1_RINT    99              8 Y; h9 q; H2 {" T' P# W/ P. j
//#define MCBSP1_XINT    100  
& }9 D7 F8 K. K( H" Y/ c5 {4 Hstatic int MCBSP_MAJOR=239;
; B, @" w1 g4 O! w1 Nstatic int MCBSP_MINOR=0;
2 z3 O4 c, J. N& R5 m; I% rstatic int count =1;
8 |6 \% m4 ]$ p' q' o4 k! X" N# j/ K8 l  t$ q6 h2 m+ L
#define MCBSP_NAME  "MCBSP-device"( O' e! }) s, M. p( ]

9 B. E+ y- B0 {4 V; S* q' `& Xstatic struct cdev *mcbsp_cdev;
& g8 o) ^6 y- f% {, I0 T: M$ P/ w* Vstatic struct class *mcbsp_class;
+ N* O1 n3 N8 x3 G/ }static dev_t mcbsp_dev;/ v3 ?/ Q6 S) T/ C
unsigned int DRR_data;5 ?8 a2 F* [6 t/ b* ~
unsigned int DXR_data;, i: U6 i/ F3 ?  O( _
static int mcbsp_open(struct inode *inode,struct file *file)& c7 @( S  o7 s% T
{
0 Q: M4 T/ i5 Y! F7 {  Q* E   / B2 G- X0 D7 @& Z% y( T
   //interrupt enable,initialized. J+ G- z  U, g& m, _
   unsigned int temp;" |9 Q6 i, y3 f4 t- L1 t/ n: T* U
   //SLEEP_EN(GPIO8[10])---0
7 k% o9 X) ^& Y' i1 I   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));- a* b+ B9 v9 I  M
   temp=temp&(~0x00000400);
0 |2 Y8 S  i& ~2 |4 f; g3 X   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
. p; U$ A( J% @1 f0 X' ~5 x  X$ P  //RESETn(GPIO8[8])----0----10 w: I; S, a  R0 `& U" c# ~3 j" c
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
0 K* I% I8 E% f$ f/ u   temp=temp&(~0x00000100);6 K& j  y% c3 _- b$ B0 Z6 F
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0% m! f( H( x& [( p
   udelay(100);% `+ i& G9 k9 q1 q1 G0 U7 v; Q9 \
   temp=temp| 0x00000100;
  s5 p+ p" l, O1 @   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
( k  G/ x; {) R& J   udelay(100);
& k- R9 d0 u) ]3 ~   printk("open success!\n");3 i. @& Q2 s# q! `6 k6 K
   return 0;" \/ t2 P3 e: C& H% H+ B
}
' ]& U/ e  @. D/ u9 ?& h  V" c( G8 [0 ]* g5 X. I
static int mcbsp_release(struct inode *inode,struct file *file)
% s: }+ f1 a- h7 q$ j1 V& m' h{3 I# a4 y% e2 o: F% k
   printk("release success!\n");
  r$ [8 L7 ]: f( Z. V1 B   return 0;; [+ w) d; i8 b# M3 I
}- L9 L9 B6 d# }3 m1 f

* @) j" a- i' S, o! G" z& _static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)7 K& n1 B9 d( E  E
{/ {; p4 b5 e( I6 Z! q
    copy_from_user(&DXR_data,buf,len);
( m+ n" I+ s# M. [8 E    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
" K: ], B/ h, Q( o' `    return 0;# L0 \- a5 j7 Q$ \5 |5 Z
7 X  w# t, D, W5 Z% C2 C
}
. d" L: `3 `& U2 A
' U: o5 L2 n$ a0 pstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off), \' F# g2 Y) n/ |0 [9 @
{
' b% h1 F1 u3 e0 w1 w   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
5 @5 y% b& D9 j. ]) ~   copy_to_user(buf,&DRR_data,len);
3 b7 J9 y" x0 n2 t1 \) E% X& q( D   return 0;
0 |) P8 V6 A4 z* w3 c9 K8 J}0 ~1 ^) ?, F* ?+ X- v" W" g6 f
" G7 t8 K& s9 J# _9 a6 d! o# L  I
' h. U' Y" ~" W; e* |& {
static struct  file_operations mcbsp_fops=$ h( H8 ?* r- Y" T
{2 O; |" u4 R( a% P
   .owner=THIS_MODULE,
% L# ~$ q+ q& @7 Q   .open=mcbsp_open,! k$ U  m% R2 D0 g; I7 i; O
   .release=mcbsp_release,
# A" L2 c: i: ~* _  @   .write=mcbsp_write,' ?7 S# y0 O% d& s  X: ?* F
   .read=mcbsp_read,. {# y- c2 F; X4 I
};3 `/ {9 K. c4 w/ {2 B
static int __init MCBSP_init(void)0 ~+ |2 T) l7 P* I& P9 @
{% o5 N" F0 ]; {$ _7 O8 Y
   int ret;
: w; k( b. L; b. p  X   unsigned  int   PINMUX1_REG_old;5 O; V0 h# u9 z! ~- x2 C
   unsigned  int   PINMUX18_REG_old;0 q) _; T1 |2 l$ s. G% h, }$ s0 y
   unsigned  int   PINMUX19_REG_old;2 i1 B6 [0 h( x* h1 ?7 C6 m8 X0 e2 u
   unsigned  int   temp;    P0 [8 a* n/ i4 b/ k" g: R
   if(MCBSP_MAJOR)
  s! j+ X% q% M/ C: h   {
+ Q, t$ v5 l' E% f1 \      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);1 u: s- m. W, M& `
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);! P9 B* y' w9 W; _7 Y) e
   }/ Q: f" f# W8 _' ?* s, h
   else
' `8 v7 @3 ]/ M1 ~   {
) ]- `& W! f8 f( h9 p) c* Y      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);; e$ J* S3 C# |1 f% p
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
+ O3 K3 x6 ~' a! K6 R   }# v$ Z# s8 F) v5 C! H2 s" p* l* o
   ! P7 Y, O% j; P
   if(ret<0), _9 b- v4 c) M' ^; n
   {3 j& \; e: p2 _0 C3 C
      printk(KERN_ERR "register chrdev fail!");0 i) ~$ {5 Z& H+ d7 x
      return -1;
4 P' e, F3 e7 G0 u/ ]+ K. C- B  x) t   }
1 O" m7 l4 U* v: f   
3 h) f' s8 @( J% p   mcbsp_cdev=cdev_alloc();
! d  w( ]; K0 y6 n, c( ^   
/ Y6 v* {- R, X1 P4 E   if(mcbsp_cdev!=NULL)2 C( e# z% e/ j& f5 Z
   {% j, K: L1 `6 [
      cdev_init(mcbsp_cdev,&mcbsp_fops);
' k  ]0 h* t& ^      mcbsp_cdev->ops=&mcbsp_fops;6 r2 o6 O0 i7 g1 t
      mcbsp_cdev->owner=THIS_MODULE;
, F0 u' F1 ~4 G3 M      
9 A7 ]* N" a  `+ P" v      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
  O) n7 n+ G* b! K. c          printk(KERN_ERR "register cdev fail!");
. I) E$ `2 E4 ~& w" m) Q      else
8 y; \  `1 S0 n7 K1 T% p          printk(KERN_ERR "register success!\n");
) J1 w0 W+ o) G( w' |  V   }
. p/ Q" Y9 |: `7 P1 W   else/ Q, w0 i" B& R; k( }
   {
4 M! Y6 R: k* h8 z# _: A      printk(KERN_ERR "register cdev err!");+ ~. ^8 ]0 S2 @! ?! `
      return -1;
+ p5 a: b/ Y3 @+ ?$ G   }
# `( U8 M2 x' `   
: F+ _. p* C+ u+ d- z  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);& O6 d' Q# c* R$ t. G5 Y2 g* s
   if(IS_ERR(mcbsp_class))
4 @: l) Q  ~$ ?9 o7 U9 f' t( q3 x   {3 l; o7 C/ h' P$ c* f: K
      printk(KERN_ERR "register class err!");
8 ~! o4 x+ Q  _0 K" Z   return -1;
3 V6 P1 K+ z: a' ^+ t   }
2 }' |0 _. o! F, S, k   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
: h/ c0 W+ K) {7 n- z9 E, U; Z1 o' B& d
   //PSC, g# _) D* u4 S8 t
   //add Enable MCBSP
: a0 U) c! ~6 B' Y7 H   //test
% P/ [( W# [1 z  o- g- q   temp = 0x80000003;
; h: Q+ n, L& [/ d) c( d7 ~  l+ Z   writel(temp, IO_ADDRESS(MDCTL15_ADDR));2 z% ^$ W- B, \" W
   temp = 0x00000003;
( V3 J) t+ e2 z4 S# `   writel(temp, IO_ADDRESS(PTCMD_ADDR));
6 {/ o$ v$ G! _: \3 o" k
% ~# z3 w+ ?8 z1 u( q   temp = 0x001FF201;* L* Z, E& z1 ]% h) N
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));& `  F( \" ?$ W9 z/ Z% L1 L
   ) n5 M) S' t8 b3 n6 H( m1 j+ F  }
   //PINMUX  1 T5 w: x' w: t/ |. F
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,5 b" R, D- Z& Z7 u1 A
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  0 u& ?* w, p8 z- l0 h6 M
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ) ~4 D% F" Y8 {! z- _" p- h
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
. B2 p+ y  A9 y" P   
% _/ n! i$ w/ c( H9 B% u   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ _+ |6 q6 [5 H! B0 ?! a  k! S   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
/ \4 |# q5 R; q; p   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   8 q  r" E7 l8 ~2 {
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
# Q  f& ?( J* W
  H! i& i1 J& d  C   //RESETn,L138_SHK2
( N! ]. V0 j0 `& C3 Q7 b   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  0 l7 F$ w' O" _! x* q/ k
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   : E% \# B1 d2 Q
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);% `4 j% V6 u  x. u; K, P+ s

' R9 @- t* y* n# Q) X5 a; G* h * L2 ?& i: |% v
  //SPCR Register
/ a; N6 f1 M! L9 g/ S  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
$ y3 O" O0 d: R  q, S9 t  temp = 0x03000000;//(DLB=0)
3 m' C# Z8 f; t. d // temp = 0x03008000;//(DLB=1)+ |0 E# ]* v# p
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset( P" Q7 F! f! w2 y6 x; p
  temp = readl(IO_ADDRESS(SPCR_ADDR));
$ w( R. r0 D! Y8 D4 W  printk("temp=%x\n",temp);
: n) A2 u9 }$ R) C  S* }, j 0 z- }% x. w- s" Q- T$ W
   //PCR Register1 Q0 \& k' z8 `
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
6 ~8 k' d8 b& ]7 R  // temp = 0x00000F0F;
$ N! O2 I6 A3 d: }  temp = 0x00000B0F;6 x9 v) {* k( @
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized / ~. _# O7 h. Z# |& n+ B: R
  temp = readl(IO_ADDRESS(PCR_ADDR));4 q3 J# L  l6 p1 l% j" `9 |$ R
  printk("temp=%x\n",temp);  
5 B3 v, f- U7 B, I: T5 t   //SRGR Register
8 `% n1 s& Z1 a  o: d   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11# [# `7 w' d' o) ?; B5 _
//temp = 0x301F000B;2 [2 H* e& x# e- L  s2 R* H
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
; _3 L, ?, Y! N2 n% B5 J  temp = readl(IO_ADDRESS(SRGR_ADDR));* h2 o- C/ q5 _0 J
  printk("temp=%x\n",temp);
  W$ N/ K- F" ^( K0 A7 Q. M; w- V   //RCR+ a% E# {; u* v$ O8 [
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
5 C- L2 P# p. x' H& ~9 S; {- i   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0; ^8 c% W$ W7 N- _$ q# u
   temp = 0x00440040;
$ W) i) t- l9 j4 k   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   1 ^7 M' j% U% L
   temp = readl(IO_ADDRESS(RCR_ADDR));
; Y+ q2 b) l, \0 n   printk("temp=%x\n",temp);
9 o+ x) P7 x8 R+ B1 }. J$ v. B7 K; O   //XCR
( r: j& y6 y! f( \3 A9 X# j   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
/ {2 y6 X% h7 _   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
# r3 R. p" z9 f* U0 H- p4 |   temp = 0x00440040;! Z+ ]# Z7 J6 @$ a) U0 t
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
3 G, b9 @' |. q( s   temp = readl(IO_ADDRESS(XCR_ADDR));- i! N+ N% q; s) N- e
   printk("temp=%x\n",temp);- b) f) z2 N4 m3 G7 T; n
  udelay(100);  t: h; S# o7 a/ _$ Y0 l; \# f
  //SPCR Register, G2 p$ J& M% x8 v
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-17 ~% Q9 g/ S- V# f- z4 J% p8 F
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
2 F: {# d: i- A8 T8 g2 h7 m8 R  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled/ o. J8 ^0 N, m
  temp = readl(IO_ADDRESS(SPCR_ADDR));
. S* ~( o# y1 J# b' F0 Q+ m  printk("temp=%x\n",temp);# X4 @6 T6 _9 X7 @
  udelay(100);; j1 l) N5 ?2 s; V: {- h

! ?& H" s" A/ l8 I  //set GPIO direction
2 l( Y: z: U8 U9 ^) d! p) o   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));" F: z7 x* [* E* ?- M; t; j
   temp = temp | 0x00000100;//EPR----input
5 k7 ^3 t+ ?, z1 C   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
. U; I- b$ @7 f- f- ?   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
& f" n8 X2 O2 Q
3 {4 h" ?9 _3 S' b   return 0;
: F2 f# X: `# w4 D4 W3 f. U' g+ t}
! m0 \5 z, Q4 E/ ?static void __exit MCBSP_exit(void)0 u# d% E. U/ e5 }4 l
{/ Q7 ^2 E0 P- x5 {, N5 Z
   printk("mcbsp chrdev exit!\n");4 c8 ^1 E' J2 R* }% }5 N
   cdev_del(mcbsp_cdev);6 w* s* F! z& f! B4 j0 Q
   unregister_chrdev_region(mcbsp_dev,count);
5 K" k5 [2 G% W/ |: n* i5 H# T   device_destroy(mcbsp_class,mcbsp_dev);! e0 \& _% u" K, _" g& A9 F/ S
   class_destroy(mcbsp_class);
; D! A' ]. m4 V}
/ n) v/ e9 W: J6 L) smodule_init(MCBSP_init);
) J# X' \7 O* ?2 i1 }+ F' B( Q) M/ mmodule_exit(MCBSP_exit);" v$ C3 i5 r& r; b6 R) a
8 y2 o  N# Y. T
MODULE_LICENSE("GPL");
$ G' U7 I' v! P, A) ~' C& g3 O# b- V/ M
. h% p0 F: \- A3 Y我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。4 g3 w% h  M: M# Z9 ^
我的应用层的测试程序如下
1 P0 O1 _( Z+ V6 h$ ?#include <stdio.h>
6 E4 E; i) M( J# {. y, i#include <string.h>
0 U9 }8 v# o( ?- j& r#include <fcntl.h>7 u" Y+ x" O) [+ @
#include <unistd.h>
% M0 W* G, t) t: e2 j7 X* Y#include <signal.h>
+ O# r$ Z0 _2 a8 U4 R3 X7 x#include <pthread.h>       //线程
: T' u+ N/ s( Q/ v% O- C' W#include <stdlib.h>
8 `' P: d3 W; R#include <pcap.h>          //捕获网口数据
" H% s. c; H) n) y9 y: h#include <semaphore.h>     //信号0 ]2 A) q2 a& C! E# _% X9 v
#include <sys/types.h>     //消息对列) a5 v; h" }2 A& O. T! E
#include <sys/ipc.h>       //消息队列3 r: k; Y5 F. W! b
#include <sys/msg.h>       //消息队列
7 t: y- W4 E; ~  F* z5 l+ D#include <sys/select.h>( c7 H/ w# {" F$ T/ V
#include <sys/syscall.h>- j" M+ w0 o6 A0 @' L3 s
#include <sys/stat.h>
3 Q, D5 r9 Z! ^2 i8 r#include <sys/mman.h>  u% K7 |$ b- {! j
#define msleep(x) usleep(1000*x)
4 v8 s2 x. l: v( x5 m6 K
: P; U7 Y/ ]6 V' w, ]- s7 Cint main()
  f# Y  o$ Y& T" T9 H8 t) \: }8 o{
: r. }5 o0 a0 o! ^6 R- Z    //MCBSP,ARM与AMBE2000交互设备: d; k# G1 B2 C/ l3 \& }7 p* u
int fd;# e2 l* B; H+ x2 s9 N* j/ Y) k
unsigned short data_write = 0x5555;* o; V0 X' d! e0 w1 C( b
unsigned short data_read = 0x00;& M. T; X- _: p' D
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
! F3 s8 z; c3 \( i4 I //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
  i2 p" G: G+ Y" j7 n6 c8 H6 J   
% [+ K$ S6 S% W1 a+ `  if(fd < 0)
0 G5 ]# i. R( z5 \$ X  {
# j$ `6 z2 j6 {" _% E  x     perror("open failed\n");1 G+ g! l8 U, R& n, y  c
     return -1;. e% k3 {3 Y, f' V  Q
  }" P# S! o5 v( |5 j9 j4 B* X
  
4 l# K* @  O' B+ y5 c% V7 U/ b3 @; d  while(1): ^3 O! {$ X8 V6 e4 w
  {7 L7 I6 U5 C1 R2 T. v. I
   
5 J  K- N: b; }   //AMBE2000每次读写是24个字为一帧7 X' k  L3 g) J
   //写数据时将数据在底层存储起来,等到中断的时候再发送/ b& A6 ^1 a) C9 [: ?$ b
   //AMBE2000输入数据是以0x13EC开头的2 n6 @# V) c! v8 ]
   write(fd,&data_write,sizeof(unsigned short));# l# L) A0 H. [9 _# y# ^
   
; v& _$ K2 p) K7 Q! j7 r   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  * P9 I$ M+ V8 z% C3 }% k$ ~
   read(fd,&data_read,sizeof(unsigned short));& U( V! D; {! _2 D0 s; C
   & g$ U$ D- v: R, `
   if(data_read == 0x13Ec)' s2 Y4 b- Y$ K- r
   {/ s+ d+ t. y2 r- t( g) f( p
   : X2 O5 v& ?$ a9 s& @; R
    printf("data_read = %x\n",data_read);
% M+ I" }: }5 n( O9 g- T6 B) v   }7 {, ?7 C; P6 Y
   # M) _4 X8 P% M) Y4 T
   msleep(10);4 a8 l) M2 D+ J  P2 q
  4 _# k0 L: i4 c& q/ \
  /*9 |6 L& @, u6 z1 y' o6 V# h
   ioctl(fd,1);   7 ]( K# R5 u7 U: n* ?% K( ]/ L
sleep(1);1 |( H' R. v+ _6 m
ioctl(fd,0);
1 s) j$ y  B; s3 g" G) f sleep(1);7 n! U% U$ O" R% q8 G0 p, u# x
*/ 4 T6 y4 [4 h4 E  Q* ]; s8 g
  }   + M& E9 J3 R5 n6 u, E5 w
return 0;( _, {' ~1 P& W; X% @$ n  D# t$ {& J

- Q7 C7 Y$ f3 y7 D. q$ P5 D1 I& [}9 V, p! u. V0 O8 Z% ^: q
. z9 T. {/ i- D! y6 `4 l
多谢各位指教,谢谢! 急  g5 E7 B2 G; {' z# ^& i
) g- z0 o$ X. j. p5 _! o
% j+ J4 m7 _' F4 |
/ U/ z; v& n1 o) c. _  f  ^) `7 C
: ?& U$ e1 E( r$ V' t1 @
8 ^- H. a; ^" w- N! h* T+ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 14:15 , Processed in 0.051764 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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