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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: * l6 C" l: n4 u! I  \
/*, \2 A7 \( o0 U9 [
* Copyright (C) 2009 Texas Instruments Inc
* P! g( o2 A) b! N* R8 n *, p! K3 n2 a7 ?9 X% u
* This program is free software; you can redistribute it and/or modify
, Y* r7 Y& g8 `% K% s * it under the terms of the GNU General Public License as published by
& o: V% W  B/ Y% Z4 c! X0 W1 M; E- a0 g * the Free Software Foundation; either version 2 of the License, or
: g, e( N) S2 N$ t% L3 O * (at your option)any later version.
" s3 I$ z* L, g2 e/ } *
( y7 P- L* B: U * This program is distributed in the hope that it will be useful,7 q6 [- ^% M" Y7 r3 Z+ i% X" E
* but WITHOUT ANY WARRANTY; without even the implied warranty of8 U* J) J# w, Q+ x
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# |  I0 }5 ~" h
* GNU General Public License for more details.
/ o" ?3 h: T3 ~0 }# m1 |" N *& t/ y$ s: A) G! L
* You should have received a copy of the GNU General Public License4 S( j1 p3 w- R- [5 w; ^% {: e
* along with this program; if not, write to the Free Software# }! n  ^0 j4 z! ~$ c* m
* Foundati9 f% i5 o. w6 M9 O2 D
*/
! n4 E: }9 H7 D4 G#include <linux/module.h>
4 r& `; a  O5 N; c3 g#include <linux/init.h>' l4 D$ e3 p$ _6 n5 ?
#include <linux/errno.h>- c& C$ M) D$ j" w4 V# C6 i
#include <linux/types.h>, l5 Q! r: P1 e! N2 G. {' C: s6 b$ Q
#include <linux/interrupt.h>8 u. j3 ^( M) |* \6 l1 i; S( P
#include <linux/io.h>% ]4 Z  I+ z6 ^0 P6 ]7 ~2 q' _% A
#include <linux/sysctl.h>
; |6 C4 i. {1 h1 Y$ C0 @$ }  `* E#include <linux/mm.h>
3 X( k/ v5 H$ Q) p4 a* s; M#include <linux/delay.h>* ^6 y, C2 L, c# c) V5 {# f
#include<linux/kernel.h>1 i$ ?0 Z6 v/ u6 c
#include<linux/fs.h>
: R2 O$ A6 l; i- \5 t#include<linux/ioctl.h>
+ W. Q( ^7 R! N1 W  A% I#include<linux/cdev.h>
* c& N2 b6 h5 m6 W#include<linux/kdev_t.h>4 b  {4 {. [2 S* T9 `, v
#include<linux/gpio.h>- x2 W/ b) M6 Z# M; _
#include <mach/hardware.h>
# G9 i7 T5 G# q  ]3 a* ~3 k8 w' s#include <mach/irqs.h>8 d5 D8 k6 j% X' L8 [8 x- @

) l. S0 E* |6 Z#include <asm/mach-types.h>
8 U8 C% ?! V8 {% }; U) L#include <asm/mach/arch.h>7 S& h' |! U& c' x, r
#include <mach/da8xx.h>0 f. h; Z4 ^( X8 A' m, ^8 M
#define  SYSCFG_BASE   0x01c14000+ q) H! \9 Z) F
#define  PINMUX1_OFFSET   0x124
# F; Y$ B. I$ J#define  PINMUX18_OFFSET  0x168 & s+ R5 G2 C3 D
#define  PINMUX19_OFFSET  0x16c
6 N' r% J* B/ s7 ?#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR7 @+ k3 {  q- T% A5 o1 Y$ B
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
3 A8 E; Z' p" `4 X+ C( n#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR# t4 o1 n2 o) c- c
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
2 F9 p! F0 d! X% |+ T#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR# b. X) S# h$ F& Y7 x+ L, W+ }
                           
; P; Z* }. Q- c! D# Y9 d  G#define DXR_ADDR      0x01D11004  //MCBSP1_DXR; g# ?7 |& K8 {7 m" |
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
! Z8 o: e+ ~1 Z& ~//PSC8 m# {# l! O1 a5 N% J9 h
#define  PTCMD_ADDR   0x01E27120  7 Z' X$ r% P8 ~4 ~% N% I" j
#define  MDCTL15_ADDR 0x01E27A3C0 ?4 Z; v' k0 i
#define  PDCTL1_ADDR  0x01E27304
! x, v; `- g8 {: N- V//GPIO8 direction
3 X% W# O$ O0 @/ Y6 w#define GPIO8_DIRECT  0x01E260B08 B6 N( v0 T% ]9 Z; \3 h  a
#define GPIO8_OUT     0x01E260B4/ A8 O0 o9 l% \- e6 c7 ?% t; S9 B
#define GPIO8_IN     0x01E260C0
/ ]5 r/ ]. X4 l0 a" C! h
. v& g6 E9 ^& ^2 H9 Q( C5 F//#define MCBSP1_RINT    99              
9 ]8 r( d' y% j//#define MCBSP1_XINT    100  
& q1 f" C5 U" F* E% i; `- [7 a* @static int MCBSP_MAJOR=239;, M+ Z+ M; K1 d6 y8 S8 i' S
static int MCBSP_MINOR=0;
' A) y) k8 K( W) D4 Sstatic int count =1;4 [4 q( h& E) t3 g) U/ n
& y# b1 S$ \( P1 u! m! ^& G# R6 ?0 a; _
#define MCBSP_NAME  "MCBSP-device"/ k/ B& H8 c5 c- T- T3 N
0 d6 {8 C0 X6 v6 G
static struct cdev *mcbsp_cdev;6 x* }$ O5 T0 C
static struct class *mcbsp_class;; k+ J! S* s4 t; p0 n
static dev_t mcbsp_dev;
3 J5 i3 I9 I( [% ^- ]4 }- Yunsigned int DRR_data;
5 y9 q* J0 t6 R" E* G1 zunsigned int DXR_data;
4 I7 C, _+ }& Tstatic int mcbsp_open(struct inode *inode,struct file *file)
) A8 \! G# {5 K+ |0 f{
" L' z$ ~* ~4 Q+ d& H- J2 {   ! V+ {* c2 r- ], K( X
   //interrupt enable,initialized
# Z/ l$ \6 y+ y) H$ P& P  s4 U   unsigned int temp;
/ u8 V6 G& L7 S( m   //SLEEP_EN(GPIO8[10])---0
) _* w4 E! L4 _: f# f   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));- b5 R) Y5 q9 N
   temp=temp&(~0x00000400);
3 J* q$ y' Q% ?. D6 z; ?   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]2 V4 c& `( J1 D3 T4 x; y
  //RESETn(GPIO8[8])----0----1
  k  b/ w+ ^% E% m7 w6 M   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));: C4 V6 Z. ?8 N7 O
   temp=temp&(~0x00000100);
# F2 o- L) I4 F; `- p   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0( w$ x+ v8 P1 K4 l3 V' G& G
   udelay(100);* S0 q1 {( x& n# W" g) J
   temp=temp| 0x00000100;' R& L4 R% x7 e7 h
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
( j6 ~2 i! R2 I+ |6 N% Z1 P   udelay(100);' ^; {5 N6 c' j" E- ]" b) a
   printk("open success!\n");* y- ^  d( t$ @/ T
   return 0;: V& O. t  c$ J. ^! S2 D$ p9 @" G
}
; B$ ?  D4 B# {' e  G( }
* y/ D5 t) U0 n0 v" jstatic int mcbsp_release(struct inode *inode,struct file *file)
4 v" j/ R" \" X8 f{
' _9 \1 w# z8 y9 Z/ U9 O   printk("release success!\n");: }1 Y* C( b% s- c4 q2 [% P
   return 0;; R9 ?2 L: z  Q: `
}2 {6 b' T( X3 h
7 K# w* p6 B8 f& {
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)
( v/ }: D  T' A9 N8 c{
  i9 Y1 ~* o5 E3 v    copy_from_user(&DXR_data,buf,len);
; |; N8 @  d! A  U1 D    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
: S& |% P0 W$ `    return 0;
$ f! e; x% U0 l. B
: {0 s# v& Q# R5 \. \/ q/ q}. u( G" P; f) F6 G# @$ Y" r
! s0 ]( a: L' B' O9 v: U* m, c; Y
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
! F- a9 }1 s/ q{
2 J7 [6 @* g1 b0 T0 r   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
/ o: Z! D/ H+ N" J' C* z  I( l   copy_to_user(buf,&DRR_data,len); 4 C8 R. A' Z4 C/ X
   return 0;
8 H' A, M" \. |+ R6 [: E, {& W9 ]}
0 x' ~2 J' @: {8 D9 D
7 W1 b+ z" E" G5 R* i, f) R- M2 ]; x0 E' d4 g! Z
static struct  file_operations mcbsp_fops=& f8 c+ p6 k( J
{, R& M6 f& m7 J) S3 p: S
   .owner=THIS_MODULE,
5 h; \) W3 `$ Y3 P8 i! O   .open=mcbsp_open,
3 O  u/ C* K8 U# {8 E   .release=mcbsp_release,1 y1 ~3 v% @0 T5 d
   .write=mcbsp_write,
' \' J$ t  a  B. z/ P5 X0 h& m$ z7 I   .read=mcbsp_read,1 A* ^+ m* y, p- l1 M
};" m( ?) b& s3 V% B
static int __init MCBSP_init(void)
1 \2 Z2 X" l& q. L4 F0 Z9 H% r{, j9 o8 K. m) p! r+ P( T
   int ret;: I/ n' @* ]. Z0 {* U
   unsigned  int   PINMUX1_REG_old;
: m. G5 \0 k, c2 Z# u   unsigned  int   PINMUX18_REG_old;# i+ s; S/ C/ K0 p: S, f6 g
   unsigned  int   PINMUX19_REG_old;
! ?! X+ }5 b3 I, z7 j, [  M   unsigned  int   temp;  
  ]2 Z+ r0 x" F; h( R   if(MCBSP_MAJOR)
) l) p* ]" Z, M* b  _; D1 I9 i   {
6 ~+ J' U$ x+ J      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);! x9 _& n1 ?: m4 o
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);) e+ L+ {+ D. a# j) B3 H' l: r3 K* o
   }( R3 i% D9 d6 A/ I. Q' l7 a
   else& y$ D1 c; z9 T. t2 t2 D. Q2 p
   {% f; B+ I+ b) {/ u$ ~
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);. ^; J3 C  m* d) p
      MCBSP_MAJOR=MAJOR(mcbsp_dev);; O" w; X. }1 q+ r+ P2 D/ e$ q
   }. y/ v( Q' H% g
   . P- }$ r8 Z2 Z
   if(ret<0)
& [3 \% ^% M  j& u7 c   {
. @$ J" f% H" r$ U      printk(KERN_ERR "register chrdev fail!");8 j" {4 p* ]* [  t* ?+ g
      return -1;* c) o( Q8 \' G/ e! L% c# s
   }
, ~) K( W9 L  e; p; L. ]# ?1 F   9 Z0 K2 W0 ]# v+ f
   mcbsp_cdev=cdev_alloc();
# b+ k& }' p6 @   # q9 A  Z: M$ G( z! ^# a
   if(mcbsp_cdev!=NULL)
8 I1 E' G2 }4 l" W) J: A   {# r, _% S4 K! F% k! U# f
      cdev_init(mcbsp_cdev,&mcbsp_fops);" }' |! y$ u; T! k+ x/ ?  U$ k0 p
      mcbsp_cdev->ops=&mcbsp_fops;
4 Q: L+ q% O& y5 q      mcbsp_cdev->owner=THIS_MODULE;7 i, a, ]0 t6 c+ `# S# Q) R
      & P) @! A, c3 E* \3 l( Q1 R+ [
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))2 ^5 }$ f5 l( C% n0 b  B5 a
          printk(KERN_ERR "register cdev fail!");
, m, F0 n" o2 a      else
) A  c" y& a6 m' Q          printk(KERN_ERR "register success!\n");! R9 H; j8 |: o: A
   }/ e7 F8 N! z( X  e7 ]+ L
   else
8 ^! j8 c- d/ t( y( _: [   {
! k* l0 n3 j( n1 x7 G) M      printk(KERN_ERR "register cdev err!");
' _; Z  O+ a# b( Q& w5 Y      return -1;7 O; w' G+ R0 A% F4 X5 _- Z
   }
+ y6 U0 z  c% l0 J   ; y. @9 B. o+ D; J3 x: T8 F! |5 `  l
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
9 K, \* @3 _0 \( M! D0 C; L8 h   if(IS_ERR(mcbsp_class))
; S4 `9 _8 P! h+ y/ H   {
$ B/ t' v8 Y4 A, G      printk(KERN_ERR "register class err!");
% H, c. j' D; C! d$ p   return -1;- U1 _& o* n) ?2 F4 F
   }
/ s* g/ ]# u: S# k0 }7 Y   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);- z9 b- [+ `% R9 c. U1 N2 B
% l7 Z+ Z0 [& B  D# a1 T7 D/ T
   //PSC
) ^5 |% f4 O* F   //add Enable MCBSP( G6 N" ^* ?/ Q
   //test$ `$ j2 m" C* B8 b6 }
   temp = 0x80000003;; {! G8 L- E- p1 {
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));: ?8 f+ J- ^* O; y
   temp = 0x00000003;
) d0 R" E, ]  d3 l5 R: Y/ o   writel(temp, IO_ADDRESS(PTCMD_ADDR));
' Q$ z# a7 w, y
+ v1 h7 j2 |) D( S   temp = 0x001FF201;( s8 ]) b" ]* u$ F$ O
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
; i* M" J/ c3 Q* T% J   " F- O# @0 w. w* M8 N  c; V
   //PINMUX  ! y3 l0 u" K* g, i. e
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
9 a4 t# n) E! g# |% e, K   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
6 z! N2 ^* E  }3 C/ \   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ' n$ R$ P3 |. l9 J
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);$ k) i) G$ y* s6 X% Q4 u
   
+ f- Y4 P$ j" R/ _. Q8 ^9 r& [/ b8 ]: |   //SLEEP_EN,EPR,L138_SHK1,L138_RC
/ e# w% r8 X1 Z# N% _8 ^( H  I   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  * M/ A; `  C& n( q$ F0 \9 ?( }& Y* j
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
: M, {1 I) Z6 _* h/ w   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
6 R+ o! c5 O4 E+ G # Q3 `; [: O: x" v
   //RESETn,L138_SHK2# }( c+ z) I4 B; z' V% r: n
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  & I* N2 S; }; s4 |6 K
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
0 u4 D. i" f- l6 u9 ^8 R" e" Y# Z   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);) _: s3 ?1 G  s) B( c* `

# t/ {; s+ u0 Q5 B; t  b4 n / Z" r1 e/ |. ]2 x
  //SPCR Register
7 \" Y* G" c8 v  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset8 l% O8 w: R/ r1 z) |4 x
  temp = 0x03000000;//(DLB=0)$ l- i0 f! R8 o+ e3 R1 h8 Z
// temp = 0x03008000;//(DLB=1)
" b0 s' t9 @$ v7 O  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
5 L/ L/ j+ P4 B  temp = readl(IO_ADDRESS(SPCR_ADDR));( f" S+ i- }/ D) n
  printk("temp=%x\n",temp);, t# F5 T4 ~0 g6 [* T% E
: Z( @  Q- x7 u) B$ p9 N
   //PCR Register
% t; f, s: p/ ~. j   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-07 l3 R: M' M8 s& L
  // temp = 0x00000F0F;
0 t% B/ p: a/ w9 M. Y  temp = 0x00000B0F;
% n# n6 @. [5 ?5 b! F  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ) ~4 \  M! e# ~5 O+ ^5 H- R
  temp = readl(IO_ADDRESS(PCR_ADDR));( d7 Q. L- p* j) J% I# S
  printk("temp=%x\n",temp);  ; A! |1 @2 a9 Y2 I, J
   //SRGR Register$ \/ b4 g% L& W. j0 |
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
2 L7 O  G' `: H+ { //temp = 0x301F000B;7 X  V- X! E) A
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized ! \4 `+ g8 f" S5 y1 z2 n1 l" p
  temp = readl(IO_ADDRESS(SRGR_ADDR));
; t- G# F; P' @  printk("temp=%x\n",temp);
5 g& E. C: T, n/ p5 n% Z$ b   //RCR
+ d5 m/ u  m# O# R0 p% Q3 O   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,% M( E5 r1 t  {9 w+ D
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0$ ]9 S3 C7 o: W) C' n; H
   temp = 0x00440040;
6 W3 Q& g! E; m+ U: Y, \   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   & R% a  J' s8 t& c+ L
   temp = readl(IO_ADDRESS(RCR_ADDR));2 g: w  v: [. S" o+ C& r( X
   printk("temp=%x\n",temp);
% x2 p( O2 D& K9 Q5 H9 J3 N$ J1 M   //XCR
& I; {  f. G( b3 d( n   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
; h! s6 ^3 K; U4 O: m9 _   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
8 `4 X' D  ?; W1 \. n8 q9 z( F7 X) a   temp = 0x00440040;
& @, y: }8 F3 l, ]5 Z0 e   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
& {& p. l2 E+ ^" o# G' \8 w   temp = readl(IO_ADDRESS(XCR_ADDR));
( L' R2 t6 H( w5 j- |7 F; L   printk("temp=%x\n",temp);- B) G+ e: j; I# U; }
  udelay(100);) u" Z2 i% B& q! S) t
  //SPCR Register1 g2 h- ?7 A+ c, m0 E& J: c* a& J- Z
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
+ _8 \/ m% D7 s9 O' n. V  temp = 0x03C10001;   //DLB = 0 VS DLB = 1+ ^, j' v0 p0 U) M
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
1 g; F3 M" ?2 l- {  temp = readl(IO_ADDRESS(SPCR_ADDR));0 J, b0 F/ q: Z! y6 i
  printk("temp=%x\n",temp);
+ s3 _' z! T, i/ [2 U  udelay(100);0 g) O# y0 l& b% l- L7 k$ D
* `: M3 I) K# Q
  //set GPIO direction+ o- S7 z7 l" B2 t( x6 v
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
& T/ ^1 B3 F* d8 G   temp = temp | 0x00000100;//EPR----input
9 T/ S' O( K3 B/ ]: J2 n. U& ?   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output9 P4 B+ u  F+ ^$ e8 J- {
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
5 B3 I5 ~& B# K% q! H2 X: F! H : e6 _1 B8 J4 m0 H5 O3 y( a9 m
   return 0;& M0 i% E) S$ `/ @
}
/ x& ~5 R+ [0 U4 a2 B# ~static void __exit MCBSP_exit(void)
- ^, b5 U* Z# }{6 U/ F) x6 Z& v' o
   printk("mcbsp chrdev exit!\n");% p: K4 |& w1 l) A+ x+ M
   cdev_del(mcbsp_cdev);( s  C9 g. {) W1 t6 {
   unregister_chrdev_region(mcbsp_dev,count);
0 O& @& M0 ?' K   device_destroy(mcbsp_class,mcbsp_dev);7 q+ ^3 T7 |7 D
   class_destroy(mcbsp_class);9 @" j; x3 e. _3 K) |
}/ N/ i- i% r8 J3 n  o
module_init(MCBSP_init);
% a+ S! `* ~: v; wmodule_exit(MCBSP_exit);
3 o5 s: V+ }( I7 v1 v2 M. H8 ?! P3 R: Y1 I
MODULE_LICENSE("GPL");/ I9 Y- I- q- x4 r3 P

' ^* f  g' Y9 l" q! R我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。- [& `% p* @# n. ]
我的应用层的测试程序如下; D6 e. w4 A$ {! e
#include <stdio.h>
6 p! d" g6 w  O; s$ K; m#include <string.h>
( J- [/ c# A* ]" j#include <fcntl.h>
+ C) b7 {6 D, d, S8 h#include <unistd.h>
8 e% [! ]% P$ x/ c! ]  S5 I  h1 E#include <signal.h>  E$ w- ~0 p; H0 x
#include <pthread.h>       //线程
2 L8 Q7 S# q7 j/ u6 b- m9 j#include <stdlib.h>
4 @# l4 c! |( h7 R#include <pcap.h>          //捕获网口数据
* h5 v* }/ u7 e* W# s1 Y3 ^3 b#include <semaphore.h>     //信号" j: T! p  s5 R
#include <sys/types.h>     //消息对列
# m8 t1 c1 X( `* Z' D' D#include <sys/ipc.h>       //消息队列
8 F' I1 m3 Y) q+ K#include <sys/msg.h>       //消息队列; ~1 j$ }* |/ k/ Y
#include <sys/select.h>
) e: g( F# R% Q. @! W) i, j  J! o#include <sys/syscall.h>8 ]8 D* u5 l- N4 e3 ]
#include <sys/stat.h>, s2 h1 E' y& K0 q8 `% S$ j
#include <sys/mman.h>; U8 U+ F, ~/ h8 l- e6 G
#define msleep(x) usleep(1000*x)8 M% O- c3 ]' l
$ O# R' m4 L. a
int main()
( Z, P# {2 p& V{ 0 r% F) i4 Q; ^* ]- I
    //MCBSP,ARM与AMBE2000交互设备! s/ E: D7 K) s  L) L
int fd;( S' \/ L1 ^5 X: ]3 q' \
unsigned short data_write = 0x5555;
; ~5 _- d! ?% i& j) g7 Y; u) a: O unsigned short data_read = 0x00;5 s/ P6 b# f! O! J9 @+ D0 X( F
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
8 L3 R- }4 o4 q1 m9 V; L //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
' ]( }( [* @6 U# G. {   
5 x; z, P! z3 N% p  if(fd < 0): H- a% g3 _1 Q' f& L
  {
: y, ]9 ]) h: l' H. N" A! t     perror("open failed\n");$ A3 F$ y! ^+ Y9 E0 o
     return -1;4 A2 X9 ]4 V1 E; g9 R
  }. c7 t; G: j' N. C
  5 X; B3 A# D) c0 {0 ]9 ?9 S
  while(1)
7 }9 h+ W: w9 `# S6 Z, _. h  {
% P( a. v9 y( M- z' e" a$ b   
; Q  J1 Z( o. R$ a- ?   //AMBE2000每次读写是24个字为一帧& b# e: r; Z7 S2 q" ^% n4 Z
   //写数据时将数据在底层存储起来,等到中断的时候再发送
( M$ W8 ?) M! e: f: e   //AMBE2000输入数据是以0x13EC开头的3 _0 {0 k/ k# s' o* r4 \6 `8 ~
   write(fd,&data_write,sizeof(unsigned short));2 Z' S6 q3 e: E. `
   
7 ?' E5 _$ A- F% i4 L" C   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
  |2 q( `% i$ c   read(fd,&data_read,sizeof(unsigned short));
" }3 @( N" V/ R% T4 w   
- d: M# \- Z# K4 k   if(data_read == 0x13Ec)/ _; Q2 x7 V- ?( e8 d# H, |6 |
   {/ j3 h' _) ~6 n; e
   
6 P5 m$ C. S) C0 p) B1 B    printf("data_read = %x\n",data_read);) I. k9 W, t9 C5 W2 h5 u) {/ C
   }
/ F# U: [3 N/ g: n: A   $ f8 k# m6 x% ]3 n- ~- D$ T
   msleep(10);) P/ w0 z. ^5 I$ o. A9 J
  2 T# H. s" C, K3 r' [, m
  /*' I$ T2 v6 O% Q; H8 C/ c( l. g( m
   ioctl(fd,1);   
' [! |. @% p8 A: i7 g5 o sleep(1);2 y7 W* e( t, C9 V# j1 L
ioctl(fd,0);
! u( X# y$ l4 \" G* h sleep(1);
  t* ?/ z3 Y% ^. Z: z4 v/ | */
% r4 p. n- B. a5 D  }   ! `0 z+ c( D) o# ?
return 0;# U, J$ j( b  Y: e7 j7 s

: }1 m* g; t8 t}5 h0 ]+ ^) R/ {. N

, e1 x& G1 f/ i1 g多谢各位指教,谢谢! 急
& r$ x3 `/ S* v* w
% T- Q: }3 Q) J$ q0 Z: j/ S6 n* K( v% g$ `* W
+ e/ D$ u2 k" {6 A; S

7 f/ ]. ^: a( E6 l7 @) X; P. P! d
- q6 L+ N& _4 A, [1 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 00:21 , Processed in 0.056193 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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