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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 6 d* T4 U" I9 g0 p
/*6 J/ T9 f3 Q+ [( s. a& d
* Copyright (C) 2009 Texas Instruments Inc
2 y, D9 I1 N# c6 m5 Q( t( a *% H% u# M" q" F9 I, l9 K. }2 P+ L
* This program is free software; you can redistribute it and/or modify! I: Z, @& v, {5 [# _4 i
* it under the terms of the GNU General Public License as published by1 p* M& B  b" A$ o
* the Free Software Foundation; either version 2 of the License, or% k& X( d% V: ^: I6 q! Z$ j
* (at your option)any later version.1 h8 o" w# R1 c& }
*
0 E( D" }1 q) G) E * This program is distributed in the hope that it will be useful,5 z* Y: m/ Y' B( i
* but WITHOUT ANY WARRANTY; without even the implied warranty of7 m9 t' J' ~2 z  o- c' O- h
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# p# ~1 `* h: b, U1 a1 J7 c) D
* GNU General Public License for more details.- x2 }6 y4 g# T: \
*
* C( ~; }- H% D6 b$ n5 q* P * You should have received a copy of the GNU General Public License6 }, X( c* W" _4 ]  S
* along with this program; if not, write to the Free Software
+ A5 ?2 a4 S4 g5 ~& j( O * Foundati* B0 W1 ?$ O5 F, G% e6 i
*/. l" I  ^" D2 r! o1 [; s
#include <linux/module.h>" t7 N% k* n1 R) I; i
#include <linux/init.h>
; _+ G) a6 E# U% y7 o' D3 v#include <linux/errno.h>5 i" e) a( y; Q5 o
#include <linux/types.h>
: K: I2 l% s9 _3 R#include <linux/interrupt.h>
$ g8 i; M- B2 _" A#include <linux/io.h>
9 a9 L- f; V# r/ ]2 F#include <linux/sysctl.h>
% r" [# ^2 O" p9 Q, F4 v* B#include <linux/mm.h>, {: }. @& ^3 R) S& P
#include <linux/delay.h>. h9 f5 T/ O' M, F2 d
#include<linux/kernel.h>* |$ `% n6 ?3 j, }
#include<linux/fs.h>
/ a  E/ P$ m  l* s8 i#include<linux/ioctl.h>
( K4 l! ^3 h6 f' E( E. r/ d#include<linux/cdev.h>% h9 M7 \/ h5 b+ ?( N
#include<linux/kdev_t.h>, B- Q, b/ z- h2 H* M' I7 t; t
#include<linux/gpio.h>' I$ w' B6 E- u3 u5 @8 S
#include <mach/hardware.h>
, e; s; q7 ~" ?#include <mach/irqs.h>( _/ z0 T& ?5 }1 U7 n- {. f

: ^' n) i+ {: j; E#include <asm/mach-types.h>
" m$ O% e4 Y. ]#include <asm/mach/arch.h>4 o$ y; P& H, a5 F" X4 T
#include <mach/da8xx.h>
* z* x! {0 s  D( K#define  SYSCFG_BASE   0x01c14000
2 l* ~  _" k$ \6 V" `6 U#define  PINMUX1_OFFSET   0x124 & d, q* x+ j  M
#define  PINMUX18_OFFSET  0x168 9 T6 L* j8 X) O( N+ I: ^
#define  PINMUX19_OFFSET  0x16c
* m. g; \3 X7 k#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR, d$ C, C2 C$ k* c/ i
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR' ^* T7 l/ K. S
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR4 O' l4 H* ^2 c/ T7 W
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR) Q- l9 B7 y8 p; B
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR" y5 S  ]+ D+ c- N  g
                            / |5 w$ u8 L& F9 a8 |- p+ O2 n% c) U
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
+ G3 J0 z  ~5 \% M4 W#define DRR_ADDR      0x01D11000  //MCBSP1_DRR& P3 g6 ^" C, Y* K% w9 e" H2 J; ^% }
//PSC
9 P9 _0 ~% d7 L; ^  L#define  PTCMD_ADDR   0x01E27120  1 o5 N% O0 m5 y# J
#define  MDCTL15_ADDR 0x01E27A3C# J6 D2 g$ U% n7 A. F; j
#define  PDCTL1_ADDR  0x01E27304( X* s' H5 L. m9 }  _9 q' c
//GPIO8 direction
4 F4 H/ `* |! ^* g. q#define GPIO8_DIRECT  0x01E260B0+ |3 g- R/ `* |: s  U, |- ^; v
#define GPIO8_OUT     0x01E260B4
+ X" n9 `  y! H$ i+ `  I' q#define GPIO8_IN     0x01E260C07 ?+ X( V4 N! k& J) a

0 e7 u% |3 ]7 p% ?8 |& Y//#define MCBSP1_RINT    99              2 K7 b# x5 G- z2 C
//#define MCBSP1_XINT    100  
) c" e8 O; K& vstatic int MCBSP_MAJOR=239;2 C' E. ~, s( r2 O
static int MCBSP_MINOR=0;
; K8 u$ E2 R) n" i; c4 v- `! Pstatic int count =1;! |% X8 C+ h( s9 O; F% x: x
' Z4 V" T; O$ N: r2 e
#define MCBSP_NAME  "MCBSP-device"
( L$ t+ z# w- o8 j1 N
7 A9 V$ c9 X2 o6 d- n) h; Astatic struct cdev *mcbsp_cdev;
* c3 `) \& j& |  T  s) tstatic struct class *mcbsp_class;
1 h6 [" |: x! jstatic dev_t mcbsp_dev;' @- K3 ?- @2 L8 a1 {
unsigned int DRR_data;
# M' j, f  m! Z4 {7 Uunsigned int DXR_data;4 h$ z% A7 n% X
static int mcbsp_open(struct inode *inode,struct file *file)
' c0 t4 O9 D+ U; I{
& |+ O7 h- ?* Z' v/ W   1 L, u( E0 m+ h! r( A9 d; L
   //interrupt enable,initialized
' q+ z) i! z, o0 T3 m" P' B& j   unsigned int temp;
5 P1 @3 c3 W7 y7 h   //SLEEP_EN(GPIO8[10])---0. ~1 }7 q. {, t$ j; @
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% P- |, q; B0 \' }1 s- u
   temp=temp&(~0x00000400);
7 A! ^' q) i& F# g% V( M   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]: `9 o$ E2 _3 ~* c! u% _
  //RESETn(GPIO8[8])----0----1& d% ~' x. E5 ]" q$ Z6 ]" z6 t. @
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
6 [6 X! F) f+ {) V9 q. L3 C   temp=temp&(~0x00000100);: g* x2 r$ Z5 R2 \# o( B
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
  v8 i: k  ]7 B; P   udelay(100);; c% k% _7 f- v7 ]0 K9 x! m
   temp=temp| 0x00000100;6 {3 _, k" \: L' {0 X* b: m
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1! m2 O+ F% t9 X5 B- o
   udelay(100);4 p6 J, r& R1 Z. W/ M
   printk("open success!\n");: T$ U  f  k7 x' d/ P
   return 0;
4 c" [  y6 ~; N  S' [}, M2 |' {7 w* {' z

  q6 b* S1 R, Y5 b/ j* `& d4 _. Q- `static int mcbsp_release(struct inode *inode,struct file *file)7 t8 h& \8 O/ K) K; s, F) S  [: B$ O
{3 p* ]# z( ?1 r/ Q
   printk("release success!\n");, p2 U- k4 H8 r/ W4 U
   return 0;; ~. }9 m, G$ m1 m4 {( k- ]5 h
}6 X1 Y7 |* r% s/ {, L# L; D0 e
$ D( A) k& T3 L* ?, q& g
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)  {$ d7 s) ~! h  Y0 d* R* |
{- _7 R- G0 r; f
    copy_from_user(&DXR_data,buf,len);
' D" n& g2 j9 D! A    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
+ [6 `7 a! q' C( z    return 0;
; B" e# k% m$ X  v1 f   ?$ C! q) o7 E: e/ p4 l. Q
}
2 w; u7 j4 g1 _- I1 `! M7 s6 }8 r$ |/ a* \: v8 }" _0 d
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)8 H4 h% j5 F" W% Y- e7 w- S$ k
{ ' N) U( z9 f( Z: S2 [& R# z% m
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));7 x" w+ B* \% ?  X/ ]
   copy_to_user(buf,&DRR_data,len);
# {1 ]  @6 p. ?   return 0;& a4 o0 F" w/ ^; m  |2 v: }4 b
}
! C) D4 F- s( x- O. G( M9 H5 f" C5 {6 _; F$ d. M: `
% {  |5 Q- Y$ K5 Y5 C/ C0 I* l
static struct  file_operations mcbsp_fops=+ v/ {( _5 Q, Y; e. |! m1 v5 O
{/ z! D, x% H& j8 P) r
   .owner=THIS_MODULE,
! O# C$ C% l9 R5 a6 x* b5 Q5 Y$ n   .open=mcbsp_open,. J: Q* M2 ]0 M' P3 I( j' x- l- I# N
   .release=mcbsp_release,5 j" \: H3 [+ m
   .write=mcbsp_write,
2 a2 a/ m9 j" O9 m0 ~   .read=mcbsp_read,( ]2 g) j- n! ?- D7 Y7 _: k
};) I5 k" O, `5 u2 f+ H
static int __init MCBSP_init(void)8 @, T9 I8 @, g, D
{$ s6 `' G$ ?! Q# |( {$ `
   int ret;, C* L0 F4 x- }1 N. K2 ?4 q
   unsigned  int   PINMUX1_REG_old;
7 |4 Y. A+ A/ B- B- X% r7 J   unsigned  int   PINMUX18_REG_old;5 i8 R: O$ ?5 N) E. @1 p/ e
   unsigned  int   PINMUX19_REG_old;9 o$ y! U7 d4 v5 `
   unsigned  int   temp;  
5 h8 U1 Y" t- n4 {9 K4 x+ H4 X  s/ P   if(MCBSP_MAJOR)6 {% }3 e( a/ V6 y
   {2 Y; u2 {9 z# P& V7 s( G1 r# f
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);& M) e( M" B4 p% M- ?& G/ z9 e
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
/ g  R7 h+ n# {$ J   }# U& V. [5 ~6 ]3 P
   else* c* d/ ^$ m5 a! I1 |
   {+ @! j0 H  o7 s* l
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
+ o2 z0 W3 ]: [+ @! `      MCBSP_MAJOR=MAJOR(mcbsp_dev);* ~0 j/ L1 M# c9 o
   }
' `3 `4 J6 H- |3 s   ( ~8 c6 c7 @/ |2 y7 k0 R' W
   if(ret<0)
) Z. ?* _# ]& S   {( d6 r% E$ `8 i7 \. Y  ]
      printk(KERN_ERR "register chrdev fail!");4 G, n/ l5 Q; Q' a
      return -1;+ }$ A+ ]0 d1 }# t
   }3 l0 Z- i% E# G" k8 q4 B* Y
   * B2 y( a) e& d, H
   mcbsp_cdev=cdev_alloc();! ]" h! k" B2 k0 j4 x2 x  s5 j
   : N3 l6 ?3 X( P( p* c) d
   if(mcbsp_cdev!=NULL)+ Q, H0 w/ ^, I; ]; I
   {
6 a% [2 u7 J- E/ [6 h* F2 W      cdev_init(mcbsp_cdev,&mcbsp_fops);
0 ^- {% j3 g! r2 ^      mcbsp_cdev->ops=&mcbsp_fops;: z" u4 w' c8 Y  K: J
      mcbsp_cdev->owner=THIS_MODULE;! t) t6 x7 {7 u$ \
      ( Y9 c) y" g4 O
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))+ |3 z- N7 H/ @0 D8 n# P  t; t
          printk(KERN_ERR "register cdev fail!");
# v+ m! A) B$ ^: C* T- N1 d      else2 U) g8 u( `4 Q% p
          printk(KERN_ERR "register success!\n");' s* P2 e, m! c; K" k, T" `
   }
2 K- k) V' Q* \$ `! P$ c   else
. `- W/ V3 a/ X+ l   {; d4 ?1 t9 F/ @. y& ]
      printk(KERN_ERR "register cdev err!");1 G; S5 |4 \. U! Y! z0 O; U
      return -1;
' o( {* x( b7 z1 F0 T8 @   }* E1 I- A9 X/ Z$ F, o- L
   
6 l+ }. O# p( b8 q+ [" Y5 x  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
' X. a) O. f2 @' @: w   if(IS_ERR(mcbsp_class))
! q. i0 o; @5 d' j5 b   {
! u  s) I4 \7 n+ y/ l9 ?# j      printk(KERN_ERR "register class err!");
' N( p. Z7 A2 P; D, W   return -1;
) Z! b- {3 K; |9 ]" x   }
: K% @8 b, h9 ~   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
. B/ G! h' `* n# B" V) R9 L. ~% z. z! I; s: }& t; Z. Q2 U+ N
   //PSC
; c6 d/ q3 Y/ [9 m3 s   //add Enable MCBSP* G8 b( _, N" w) \2 _% D0 l' M
   //test' u5 d4 k1 K% ~  @& l
   temp = 0x80000003;
  ?8 t& ]( I8 F! o; M# A; t   writel(temp, IO_ADDRESS(MDCTL15_ADDR));; |' Q( x' K4 ~# e5 M. D6 E. _- Y  Z
   temp = 0x00000003;
" x# ?* z! R/ I; J* J$ W   writel(temp, IO_ADDRESS(PTCMD_ADDR));; v2 U. N# R( ]- i9 V

" X. B' D$ D( @( _/ c: D) n: M5 Q   temp = 0x001FF201;
$ b! k* J9 ^8 X/ F   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
: A; I* a* ^# f( t   
9 M7 k* |7 j6 M% J   //PINMUX  * ~0 F1 E$ _) l) G- O- n8 Z7 ^# b- H
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
1 _# x0 c. o6 j) L   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  $ M, b$ W5 `% p. j8 k
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
/ t9 [  S3 K0 \  l  q* P   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
1 j5 D4 h/ S8 N' z  \   
9 h& R9 O3 M/ o8 |   //SLEEP_EN,EPR,L138_SHK1,L138_RC
+ L7 ?  [; V2 R2 C; b0 r. v   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ( f2 ~2 G7 t8 U6 E3 B6 H0 z; t& u
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
6 t. L) a+ [: ^: m   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);+ z6 B0 d/ E; l, T1 }* U8 l
% Y7 h. j9 R" Y3 c9 u+ d3 Z" ^
   //RESETn,L138_SHK2
- T, @- R* G3 w7 W8 L   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
  m1 y6 z% q6 u9 ~. X   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   " s3 x0 z& p3 b; f/ @7 A: W# Q
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
" @2 v- }# g: ?, j' w
' j/ }5 r! R( {' a" a
( F- D+ B; x. m0 B. m! Q/ R3 v9 ~( {  //SPCR Register
7 U; t- b( T* r/ r4 \7 }1 i  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
5 k  t6 {# {, y: F; L  temp = 0x03000000;//(DLB=0)4 ]3 f1 x% E- l- U* a9 I" z% \+ T
// temp = 0x03008000;//(DLB=1)
, n0 M; u4 W) C: K8 Q  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset; |, b( }# |$ M& X4 _
  temp = readl(IO_ADDRESS(SPCR_ADDR));  m; Z' n7 l: b) U! ]! ?2 A
  printk("temp=%x\n",temp);
1 e5 x3 p" m* w' A: x6 c0 e4 o 2 \+ x1 k3 K7 z  ^
   //PCR Register2 P% q  [7 q" B
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-00 [. ~  \6 F( I. Q$ \
  // temp = 0x00000F0F;
+ k0 [" U+ M5 b1 t: [  temp = 0x00000B0F;- K" q9 L+ L  }7 _& h4 A0 K
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized 1 q5 O! w# e4 e; O- k# ^) o$ {
  temp = readl(IO_ADDRESS(PCR_ADDR));' M/ L/ j; f; q5 L, H# P! M6 ?" a
  printk("temp=%x\n",temp);  9 @7 l# |$ H( y
   //SRGR Register/ o4 V8 l6 I7 ?. T& |6 O7 a
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11$ _- C* P% C$ H) V. F& h
//temp = 0x301F000B;
1 k& w& n. ^- K) U   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized " P: X( F: I  Q" S
  temp = readl(IO_ADDRESS(SRGR_ADDR));% I9 v, l$ d* k) Y4 A
  printk("temp=%x\n",temp);
) J* v" N5 @$ W& s   //RCR# B6 F2 h1 v. V% v& u- A8 K2 J
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
) M7 s7 G; T+ a0 `. S   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
' r9 P# R7 W8 G0 S, o5 u   temp = 0x00440040;% f# X" b1 ?$ C7 v$ [/ w
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
4 a2 z7 [# y- `* N3 e' U5 a   temp = readl(IO_ADDRESS(RCR_ADDR));
# d$ H2 g5 |3 R" l- b+ I0 `   printk("temp=%x\n",temp);
  r0 o- r- _1 J+ u4 l) T! N   //XCR
) [0 s7 l: L6 w2 f3 f/ ^. M   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1* \& i+ j* I' R4 c
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
( X3 B0 s' |/ Y   temp = 0x00440040;! r. p9 E9 k5 @; |" x
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
! H3 k  V. i3 d& K   temp = readl(IO_ADDRESS(XCR_ADDR));
; O: o, {% V9 p, q   printk("temp=%x\n",temp);0 {# T; `9 I  O# H# p
  udelay(100);' s5 z& C/ Y8 L! J/ n8 c! ?
  //SPCR Register% A- g1 d* y1 S, g
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1: K5 ~+ D2 U8 @
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
# b1 i4 w7 i# y  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled% H- ~3 O3 U3 ~4 c
  temp = readl(IO_ADDRESS(SPCR_ADDR));
7 y9 |9 G* l: E" `9 N; m# k  printk("temp=%x\n",temp);
* L* H% J4 t1 `; B8 S7 c  udelay(100);  J% g( T0 W2 |% b7 B. A9 w) d

# A9 }' N1 ^* A: J  //set GPIO direction
! P6 g3 ?1 g- k! O7 ?   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));* l& C& B* ^: ?# V) U- R' [
   temp = temp | 0x00000100;//EPR----input
/ X$ _) Y  d4 f   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
: |" j- M: ~9 P4 \7 o6 L! W/ W) f   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); 9 V! A' T  j+ k

( v0 H1 b, l- G' r  d0 H% x& s   return 0;6 m  y5 r+ @5 M( a* ?
}2 H4 f7 o4 B/ K
static void __exit MCBSP_exit(void)# x* d  E  e8 Q, y  Z; R+ I
{# K& R  a! k8 Y8 B
   printk("mcbsp chrdev exit!\n");
( j" E' b* s9 Q; s% r   cdev_del(mcbsp_cdev);; }) E( R% a. y
   unregister_chrdev_region(mcbsp_dev,count);8 C, A& T" x1 V8 o1 _* m
   device_destroy(mcbsp_class,mcbsp_dev);
, [3 _8 I+ c; M% R   class_destroy(mcbsp_class);
, B) S. d- {2 b2 ?7 [$ w}. t" a- h% |+ k
module_init(MCBSP_init);
4 t& T1 V6 G1 ^# ]3 f9 wmodule_exit(MCBSP_exit);) k5 i) O0 v5 |. ]/ _
- A& A+ v+ W2 T/ W) e
MODULE_LICENSE("GPL");
; M3 y3 x' O5 I4 p  f* a  _( i% K+ g" O' @' \' P. c9 n) ~# H
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。, Y9 j' @4 Y' L) e3 R1 e! c
我的应用层的测试程序如下2 s, H  q/ U4 P! x1 q
#include <stdio.h>' q" h) r2 O0 {6 k8 {
#include <string.h>
% d$ G5 ~$ M  y0 K+ j#include <fcntl.h>: \2 L: l) S& D6 U
#include <unistd.h>( w+ j- Y  \; v# N3 V+ n& t7 _
#include <signal.h>9 G; ?9 h/ g4 `2 `0 G! f
#include <pthread.h>       //线程0 n; O+ f& y7 h6 M' o5 s% v/ p
#include <stdlib.h>5 O7 F. M9 ]1 K0 z$ e) o
#include <pcap.h>          //捕获网口数据' N* P/ q/ K" ]2 [3 d; F
#include <semaphore.h>     //信号
, j0 S3 n( ?- y#include <sys/types.h>     //消息对列- C7 a$ |2 r- r. O. u  h
#include <sys/ipc.h>       //消息队列1 x( A" L2 E' X6 H
#include <sys/msg.h>       //消息队列6 d* J' ]# J' e. F+ b, P0 x) q
#include <sys/select.h>
7 E9 Z: Q; H5 L#include <sys/syscall.h>
: N' [! ]! T* ^) Q/ b#include <sys/stat.h>
) ^, L) p6 ]1 h9 S3 z3 `#include <sys/mman.h>
! G+ [$ P: J6 K# ]) M* n#define msleep(x) usleep(1000*x)5 a1 a1 z( |5 ]" b* _7 F
3 }) Q8 k4 P8 P9 i/ w; `5 Q
int main()9 X& z' R7 k" a, t4 ]6 B! \  l
{ ) H: x4 X: m* p; H) w% `4 d
    //MCBSP,ARM与AMBE2000交互设备9 K8 I1 C8 I  i8 ?- I
int fd;
3 x# F/ Z2 Q( T0 G9 w1 D7 I* J unsigned short data_write = 0x5555;
* x* Y: g# n* M; C  H5 w, G unsigned short data_read = 0x00;
/ `1 T6 I: w' s. q1 S$ w( e, ^7 f  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
- j5 I3 u: S  c. Q% H. R# b6 E //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
" ]( V8 N6 f* p7 K9 g) Y4 ~7 S    : L  C" U. [4 {- N$ A& \' v% r
  if(fd < 0)1 m- u! f" h# c# S1 F# i4 g
  {# ?6 @( r- ~/ u$ r* m8 z
     perror("open failed\n");
: T) q! p8 v7 [; R, e     return -1;
/ D5 ]" V6 V, W  }0 g8 R. r9 X0 k2 e. t; |5 n' J" X
  
: p0 O+ @  f1 G% }5 U  while(1)9 `1 B/ E7 V$ z( [5 d7 u* o
  {
8 y# a; ~/ Y( `4 P, n) H  a   * t2 y3 I% U+ V
   //AMBE2000每次读写是24个字为一帧4 X% F0 a8 r" e5 d5 ~
   //写数据时将数据在底层存储起来,等到中断的时候再发送! M) B8 a0 u6 ?" `) J! E
   //AMBE2000输入数据是以0x13EC开头的3 e3 s! B5 s6 K4 i4 q+ ^
   write(fd,&data_write,sizeof(unsigned short));
) ]% T6 [' U8 {& q/ Z" O; s   
% S# q$ L1 K# T9 l   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
% f3 c2 _; a' `" B' I   read(fd,&data_read,sizeof(unsigned short));/ h9 p8 z3 ]( z) G. _
   2 H' q/ z2 s( U8 ]
   if(data_read == 0x13Ec)
* B$ Z& A! K! i+ u2 b% ?   {6 ~3 s+ F' I* u- w
   . Y" h7 \& k. @4 V
    printf("data_read = %x\n",data_read);" _0 ^% L9 }- N3 j' c  \
   }
/ U9 s4 h0 P0 Y   ) I! h4 J3 {) i8 A6 h, j
   msleep(10);
& a' T+ B- i! L- U  # b( U% g7 U; V5 g& J9 t
  /*6 H7 Q1 D0 V* ~8 ?, i; x
   ioctl(fd,1);   2 i& |8 ~. r$ j  A. k, S
sleep(1);& O  V3 f7 }9 S/ E( d! O) {
ioctl(fd,0);
+ a/ \+ U: J/ ~3 p! c sleep(1);
8 r: L$ g  `- }' n4 Z3 e" A */
, j; F8 g  ~/ [& T, [  }   7 g% q7 k& j4 \0 `
return 0;" P- M/ h4 Y* S: q# Y2 M0 D8 _
7 m& b  ~8 o2 ]8 {
}6 m- u& O. Z( w

/ J! v: a3 \$ Q5 k. S& ~多谢各位指教,谢谢! 急- R' O0 O: m" P. }7 f; o

, a2 o3 d$ o6 ^+ E% \5 J: ~/ a
( ^+ `2 M! N( n5 U* a
5 m1 F8 u$ v- Z% y, |" s% [$ g1 b; W$ a  _: Q1 ~

; |  ~4 u+ ]: a! V$ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 01:14 , Processed in 0.051010 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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