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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
" s( w" y  s7 x; h/*# R3 h# D, s0 s7 z# O1 D" D
* Copyright (C) 2009 Texas Instruments Inc& P( d/ B$ C; s. a
*" O1 a  l. D$ k2 X* D
* This program is free software; you can redistribute it and/or modify
! `2 y/ U: I. }1 M$ y) n, K0 p * it under the terms of the GNU General Public License as published by8 ?% `3 D# H5 E; b" R- X% {& s' U+ c
* the Free Software Foundation; either version 2 of the License, or0 O, a( Y( S0 f
* (at your option)any later version.
" P8 y+ H+ K5 Y( l) i) Q *+ D. r& v6 [) y# O+ n) e8 U
* This program is distributed in the hope that it will be useful,
) ?/ j- J6 }, z9 L1 O$ F- t * but WITHOUT ANY WARRANTY; without even the implied warranty of5 _# T# o7 b6 l4 P* Z; I" J8 q
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 E, l: l+ D) W3 c( t
* GNU General Public License for more details.7 V# t0 y/ S, e% [# E6 M" i/ [
*; |( F) ]2 L, N7 U, c: x( L
* You should have received a copy of the GNU General Public License/ t2 ]% A; S$ e! r+ r
* along with this program; if not, write to the Free Software3 {. a" I' v: g! G9 Q9 _
* Foundati7 f9 [8 U$ f+ c
*/
, y9 L1 a5 x4 e+ g% ]2 v#include <linux/module.h>
. G( a" B2 W- x( x7 @#include <linux/init.h>/ @& c' Q9 W5 {8 H
#include <linux/errno.h>
/ ?& u! e* b  w! B) }  z#include <linux/types.h>* R1 M) ?/ F* H( `
#include <linux/interrupt.h>8 ~9 i6 H& J/ w/ X. y
#include <linux/io.h>/ u) S/ O1 O7 }" }" K
#include <linux/sysctl.h>  Z# [& U, O4 z# n" g8 F
#include <linux/mm.h>
5 z" T, g2 [  Y) j$ S, P#include <linux/delay.h>
7 l% X$ ^9 u6 g! f# i7 Q#include<linux/kernel.h>
3 d3 K+ B" j7 Q, h5 a7 p#include<linux/fs.h>
* n% R5 F7 c9 ]* W# j" l#include<linux/ioctl.h>7 d" R" l1 q4 q. d9 u
#include<linux/cdev.h>
/ w$ o$ W' p. _7 Q#include<linux/kdev_t.h>" A/ U3 m/ ^  e2 l
#include<linux/gpio.h>
# Y$ |0 x( W9 q+ Z#include <mach/hardware.h>
% u3 B' u+ E5 x7 k, W9 B#include <mach/irqs.h>/ v# O8 ]! `6 [7 X) g  S4 b# l

: C) n* g) {3 A9 i#include <asm/mach-types.h>
/ y! y8 {" z+ S' r" W3 k1 W- S#include <asm/mach/arch.h>* ^4 O. c& K  t8 x; t
#include <mach/da8xx.h>
* w$ _  g! v' x0 ?# U6 L* V3 X2 |#define  SYSCFG_BASE   0x01c14000" i. ~) {. Y. @. B3 |
#define  PINMUX1_OFFSET   0x124 9 V% ~; z2 x( _6 I4 N
#define  PINMUX18_OFFSET  0x168
: B+ Q5 \- Y0 U#define  PINMUX19_OFFSET  0x16c. U& T5 E$ c' A  d
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
( I4 a* O2 m1 w  m# G: r4 k/ g#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR2 F/ p; B0 b' B* l
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
$ }) Q* z- c/ {' |8 g#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
7 @& @1 N7 L2 h#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
- X: W6 g( |- C6 Z- d# q                              p8 k4 Z) ~  r. J+ n
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR0 h3 O( n0 R9 b2 W% u7 r  x! r
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR" S) @; X% F" [2 b, U
//PSC$ j/ j6 U0 L' I$ e: T! }
#define  PTCMD_ADDR   0x01E27120  9 g6 Z3 Y  ]5 P# [+ g( q
#define  MDCTL15_ADDR 0x01E27A3C7 z( s& |% ~1 B0 E5 [' O
#define  PDCTL1_ADDR  0x01E27304$ z; I$ m6 v6 s
//GPIO8 direction
" a3 w; y1 R% Y& ?* T. [% ?( S* m#define GPIO8_DIRECT  0x01E260B0
4 k3 h8 M: F5 d0 S9 w' ?8 b#define GPIO8_OUT     0x01E260B4
( l  u" ?& F6 R+ V: w# w. c" H/ @2 R#define GPIO8_IN     0x01E260C0, v; _2 K. G  F  N4 V4 E) L
+ H5 l/ c+ d! c2 Y% C
//#define MCBSP1_RINT    99              
$ b4 X# x+ Q- m0 b7 [//#define MCBSP1_XINT    100  
+ V5 c: T, O  H$ _& vstatic int MCBSP_MAJOR=239;
" Z5 i% X5 W# @static int MCBSP_MINOR=0;  T. @2 i# m1 a* ~" e- g
static int count =1;* [" `7 x4 }1 _4 `8 ~7 s7 V% S

; R* Z: V9 x( M% U8 {; T: g0 O#define MCBSP_NAME  "MCBSP-device"
5 @) M4 ^0 x6 D! R' j. Y, k$ k
% \, G8 u) D- C' x9 tstatic struct cdev *mcbsp_cdev;" d* L. [- s( C" T
static struct class *mcbsp_class;
- L) G- A) m' `# @static dev_t mcbsp_dev;( Z; z$ `! a1 u
unsigned int DRR_data;& p/ @/ j, d( E" t: a
unsigned int DXR_data;& F, b+ o. E+ V  O# r( @
static int mcbsp_open(struct inode *inode,struct file *file)
. U; R( k$ D# j! I3 u{. p' d9 x1 e4 Q( y9 l8 s" _' D
     {& K9 o0 v9 V7 [
   //interrupt enable,initialized: B2 O4 b* P- k! l1 P( Q* w
   unsigned int temp;; C% o, x  S+ P* X' i" L8 h
   //SLEEP_EN(GPIO8[10])---0
% V; C$ p9 h7 _/ m, d: ]/ a   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));/ m# x! O4 N+ z9 n' N
   temp=temp&(~0x00000400);
, {/ i# {0 s7 j9 I   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]7 v1 b# w) p: g* s& \: w) K
  //RESETn(GPIO8[8])----0----16 m4 {$ C0 M% w; ]( A7 ~
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% o3 B: Y9 z" F9 q9 M! `
   temp=temp&(~0x00000100);# H% h5 P/ ]0 o) z& j: ]
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0( U# f5 v8 }1 `
   udelay(100);
  }" o0 {+ k" [   temp=temp| 0x00000100;5 d- i+ m" t# A8 k3 a3 q
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
! Q7 |( S" b8 S0 }' c" u7 x   udelay(100);
! N) k5 A( S$ t1 z; p" k& b   printk("open success!\n");2 k/ U4 ?+ S5 h% F/ ?3 O
   return 0;
- L; E# T" F. ?! |* h4 x8 D9 Y5 W}0 {! i+ s; F. e% a# M9 v
8 \0 Z7 P( Z) r
static int mcbsp_release(struct inode *inode,struct file *file)7 x( z( B$ f; W# a7 [
{6 @2 P5 u% i+ J- f% B: y( O! t% ^
   printk("release success!\n");
) _8 N2 G; P+ @   return 0;6 t! I# s0 D( a' ~
}- R$ M# J# J# `
- R0 S; {) a' o9 U
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)" o) f6 C! N+ |8 p0 }9 K; o7 Z
{
- N9 Q' y5 }7 q  L# }  s    copy_from_user(&DXR_data,buf,len);" J: r) h* o% W. u5 A: t5 L
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       + h9 ?7 p& I8 x: J$ W( A+ A
    return 0;' Z1 \8 h' F+ z7 u. f; t

# i* ^% ^$ I+ x}7 l+ E: |1 t0 F. A5 G1 C9 G% e
( w4 F  G4 e) X4 v- ]
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)1 b1 k2 A. q: O0 ]7 e& ]! P
{ 4 d4 Q6 X2 j. {6 j2 U) c
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));& ^( S# R. Z2 l. e; n* D6 S' @
   copy_to_user(buf,&DRR_data,len); # p5 d2 O  j; b) e% w, N
   return 0;7 h4 j* F; |' F6 D' `, {' S6 l
}4 I! x3 A( k7 b/ \- K  W

7 ]( n- ~0 Z) A* y6 Y' A" e9 t( \2 F3 C' u' b. h
static struct  file_operations mcbsp_fops=
* H4 s- ~. w0 j4 g5 j. Z3 a$ Y{; a, y* n4 ^: ~
   .owner=THIS_MODULE,& B( {  A9 U" W" q4 G' z, g
   .open=mcbsp_open,
' l5 ~0 i% a* [   .release=mcbsp_release,
  ~6 O. I4 v, v6 B7 Z' U+ ]+ b1 {$ n   .write=mcbsp_write,+ q. M$ q) `5 O2 T9 i
   .read=mcbsp_read,
8 ^4 s' w+ n. ~* x$ |4 R* q8 R( X};8 [& @3 Q% V3 i. ^
static int __init MCBSP_init(void)
$ x* L+ R9 j! _# K{
/ U  t- T! S( G  \) c$ v   int ret;( `- H+ Z1 A/ P; p2 p
   unsigned  int   PINMUX1_REG_old;
9 a6 E: h6 s  T4 p, x$ `* g" f   unsigned  int   PINMUX18_REG_old;
2 t6 }* f0 Z0 b% G   unsigned  int   PINMUX19_REG_old;/ a. D) b& N! u3 @" }
   unsigned  int   temp;  
# S$ Z% u+ o- F  K& [   if(MCBSP_MAJOR)
: @8 z5 D4 W+ i. X& n% ^1 U   {* b$ a$ I5 y; G5 f  C
      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);8 Y1 O$ W  v/ [" F! t8 D" k
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);+ ]' U; c" }: D" U2 u3 r
   }+ _3 g. g' K. v+ f! N9 l/ H
   else
, \+ @$ d) p( ]4 t   {
& P% M7 }; Y# Q      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);6 n! N/ `( y/ W# }% i5 }5 U/ M
      MCBSP_MAJOR=MAJOR(mcbsp_dev);
  Z) l7 ?2 j7 ^0 a   }
; V/ R  g) a$ ~6 U- `2 \+ a, I4 X   
8 j" A5 i) h8 y( X, D   if(ret<0)
/ n2 L  y: [0 V5 x$ w, ]0 O3 j   {3 O" C/ q4 X5 G6 X$ d+ i! e* f
      printk(KERN_ERR "register chrdev fail!");: f% F4 t5 i+ v: d) ]( B
      return -1;% p: A: G% y4 i" q& u! ^
   }* S% s1 w* x9 D1 _- ~1 {& u
   
% ^9 m3 t+ R; z5 l5 u6 [4 L) T2 S$ U" X   mcbsp_cdev=cdev_alloc();
3 {, q( ]0 \4 u4 x5 M- _) @0 C   $ ~/ b' u1 s  j" D8 h9 {9 `- H
   if(mcbsp_cdev!=NULL)
& B- o' ^9 K- U   {( T1 h+ n+ D9 ~: P
      cdev_init(mcbsp_cdev,&mcbsp_fops);
5 m& p+ t2 }0 H# e8 `' p      mcbsp_cdev->ops=&mcbsp_fops;
4 m- F/ L& H2 ~! p9 `      mcbsp_cdev->owner=THIS_MODULE;
1 i; e1 v/ u4 J5 J- {; u4 C4 u      " W% u$ k  H6 a. C6 |
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
: p3 @3 h! t* S% c- ^0 m          printk(KERN_ERR "register cdev fail!");
2 m8 j& M" q7 n, s- }      else
) P; X! F' R  K2 r/ e" k$ g          printk(KERN_ERR "register success!\n");5 |. L7 T+ _" o7 Z$ P8 S
   }6 z, Y5 s! T" [% H- ^9 M
   else
# y. h$ C- Q! u" n" s   {. H' y6 }7 J8 z3 v) |7 C4 i
      printk(KERN_ERR "register cdev err!");' N* p! o/ k2 C
      return -1;; l9 R4 }3 O& u+ A  Z
   }- h: P' y9 x& f( N1 b
   
( q* J$ |$ R0 Q9 Q3 X5 K  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
1 ?+ C' y5 u, U& P2 Z5 f' g   if(IS_ERR(mcbsp_class))* y5 ^' q: [" t3 V/ p
   {
  Q, r% `& [# t0 h: M: V# M      printk(KERN_ERR "register class err!");
. }+ E: ~7 O; ~* f1 `9 ~; }   return -1;
- q+ Y7 z0 c% X4 x' ?' F   }
' u' c4 C/ T* X9 p* S# e5 }7 {' d5 B% d   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
* H$ t% R6 i" P5 ~7 q: \5 H# b' S8 b; m* q
   //PSC" \6 Y& W6 b6 j  q' o3 P
   //add Enable MCBSP$ G  G2 A# e% F6 p
   //test
3 \- |* d8 F% Y) H! P  A  n1 X   temp = 0x80000003;
8 L2 c: @  ^6 h+ k   writel(temp, IO_ADDRESS(MDCTL15_ADDR));. v- D5 k) s/ E7 G6 I% }5 b
   temp = 0x00000003;; U( `: o  a" Q1 V" c+ s3 f
   writel(temp, IO_ADDRESS(PTCMD_ADDR));3 k* t( ]8 L' h: G

) g. D/ p1 j" `  c% r   temp = 0x001FF201;7 G5 y  m) F5 `; v7 W# h
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
: z' b6 k# ?9 p5 S+ O   " _: A( W  a6 W5 N
   //PINMUX  8 x3 A: O% h% }4 p
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,5 g4 k0 t+ n  y
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
' K( Y: c9 D$ L- I) @* d: v   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   ! B0 p( a! {* h% n
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
; H0 |' T, q) V& O1 p( S: o: `   - X1 Y/ w/ h1 U3 v* c
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
$ K; d- q$ f, q/ z8 l* [" p   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
+ p: t! L. B* [* e+ a   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
% \' p& m) F0 n   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);) t7 ]' x+ i1 q

8 P% T( z# D0 @: i   //RESETn,L138_SHK2
- Z1 K3 ^, t7 x. K   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
- X: p- g$ j# o) b: y; g   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
" b  o  n# L" Q9 j; v   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);; i' i. i6 C( U" w* X. \8 {

8 r1 E+ m5 p) u1 }( k5 I5 g% E
" M* J( W3 ]/ q- n# g% k+ m  //SPCR Register4 q# d, X4 W1 k
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
$ w3 v7 F4 Q' \9 a  temp = 0x03000000;//(DLB=0)
5 q% f+ L% j% D9 O2 \4 {' E // temp = 0x03008000;//(DLB=1)
  e0 l! r0 ^2 q  N1 J  W  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset" K$ `; s+ q% \- ^
  temp = readl(IO_ADDRESS(SPCR_ADDR));
- X: \7 ~1 G8 E" f, n  printk("temp=%x\n",temp);9 T8 W" |( \* C+ M

. {. J2 T1 P) J5 Y1 X   //PCR Register
6 |- \" m" `; G1 c1 s) S   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
2 I/ ^7 M! T0 A" t" C  // temp = 0x00000F0F;$ X/ U$ {- S6 S0 a
  temp = 0x00000B0F;
2 C( i( l2 ~- Q: h  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ; k* t6 t5 ], m/ f1 T5 I. |% G' c
  temp = readl(IO_ADDRESS(PCR_ADDR));- |$ I4 x3 i: L7 n4 r4 y
  printk("temp=%x\n",temp);  % R) Z3 A3 h/ G5 G( [$ \2 b  d
   //SRGR Register/ V5 z4 Y: b4 P) z" k" {# N
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
+ t! {' j; b# f( R //temp = 0x301F000B;, J; z/ d6 r$ `# B" X6 S0 o
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
" j) e0 K" \% y# G: i8 ^( R  temp = readl(IO_ADDRESS(SRGR_ADDR));
0 U) j/ u* s; R1 P  printk("temp=%x\n",temp);& B) H, H/ Y* d8 X/ E9 G! u
   //RCR5 ~& \7 ?5 U( E! q) \
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
' p4 f- D" r2 s9 K3 k' [9 m: w   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0% R7 l4 J4 e9 w6 H" q# Y- J
   temp = 0x00440040;
" H. E  E3 p$ }# J& e! @9 H   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   0 n0 ^. ~% ]% d+ Z" a% ^& d8 O
   temp = readl(IO_ADDRESS(RCR_ADDR));5 ~& M1 }2 t$ _. s& v
   printk("temp=%x\n",temp);
1 [* I) I; Y2 b2 a  v, O& j, }- E   //XCR
% L) y) ^" w- j* T: n0 X. `3 s   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-18 d6 e$ L+ B) @
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
/ J- S" |8 p( X6 A0 K   temp = 0x00440040;. F/ G  b% \% S6 E
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
/ d1 d4 a. Q- J6 k' c1 w% F   temp = readl(IO_ADDRESS(XCR_ADDR));: i" A( B, j; ~9 ]4 ]" K
   printk("temp=%x\n",temp);
# B; O6 d% K: M) ^0 T  udelay(100);
" Y% U7 g9 p; z  //SPCR Register
! q; O1 y8 Y/ i& j. T' [# Q  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
6 ^7 E" {1 ]! H  h  temp = 0x03C10001;   //DLB = 0 VS DLB = 14 {7 H) j, `! g  Q) N( h, b
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled+ c  Q+ {, h: a  o& R4 Q
  temp = readl(IO_ADDRESS(SPCR_ADDR));# F( p. ^5 G8 b' n
  printk("temp=%x\n",temp);0 J0 U  `6 ~( e
  udelay(100);/ D" g) L; p6 T

! m# `% L/ u! z# w  J% s8 H' x  //set GPIO direction
3 Q2 {2 C1 Z1 Z% ]: D( n   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
" Y& i/ A, z; X   temp = temp | 0x00000100;//EPR----input
- d4 _! ?% {) U   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output8 [0 @# ?2 f$ Y3 O+ x  Y; N
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
+ \- @& a6 Y$ r 7 a9 r8 V1 U" n; M2 d& R
   return 0;: u; w, A6 n2 M1 x; _; @( ]( N
}
* t. A' t: l6 h5 ~! m1 hstatic void __exit MCBSP_exit(void)
; U8 Q; p: \0 }0 K- d8 Z{
- m7 r- J/ t' M) _6 m   printk("mcbsp chrdev exit!\n");
/ t) Z2 @: n; r  }, P   cdev_del(mcbsp_cdev);" a& H4 `; U5 ~2 B. e+ F
   unregister_chrdev_region(mcbsp_dev,count);
: z5 l: H: b7 d   device_destroy(mcbsp_class,mcbsp_dev);
( R4 h1 u9 k+ X- h5 E$ N% C   class_destroy(mcbsp_class);
, ?' e' z5 F5 A}. J: A. Y; U; r0 W6 A
module_init(MCBSP_init);& y/ t1 r% S8 g: G8 M
module_exit(MCBSP_exit);* s8 m- _9 d0 W: ]

- B+ R2 g3 J+ J9 H- ~+ |- A. tMODULE_LICENSE("GPL");. y+ v, n) s& I3 `
; a" ~0 x. t8 q, ]/ j
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
% s; P# X5 k& I+ G( f5 r我的应用层的测试程序如下  `, b4 W, S/ `8 c+ V, y% W
#include <stdio.h>
  C: D- P: _0 K2 S6 `1 @#include <string.h>% Q7 j: F! g( A8 L# h0 g3 [
#include <fcntl.h>' p, {/ g! C* y' U) G4 v
#include <unistd.h>
: O0 V; n. N+ d) R5 k#include <signal.h>! H! [" t# c5 H
#include <pthread.h>       //线程
  `! s" G# m+ x) Z8 r5 N#include <stdlib.h>
1 o: e9 f& ~" b& L: n" Z3 w9 O" B#include <pcap.h>          //捕获网口数据
0 `7 S" O4 p5 q  s#include <semaphore.h>     //信号
+ W& z) J' y4 Q. r5 P( q7 z#include <sys/types.h>     //消息对列
& w8 }7 v! H' }& T; e/ {& c#include <sys/ipc.h>       //消息队列/ B+ B' m+ _- X+ ?7 w
#include <sys/msg.h>       //消息队列
- ], P  E. W+ W* E2 E" E  _# m3 Y#include <sys/select.h>' f, Q4 t$ m- C( Q8 b
#include <sys/syscall.h>1 i6 c( q3 H$ ]3 e+ q- X6 P& E+ u1 W% B
#include <sys/stat.h>- E2 R$ s) v1 V- M; ^
#include <sys/mman.h>  a6 q4 B* j9 x
#define msleep(x) usleep(1000*x)0 h* t, l  Y: |9 L. G
0 E6 ]% `4 B8 F3 y4 `" f
int main()- a" |6 K. L: Y6 ^% V1 Y( e; ~7 ~
{
$ r! J8 ^; b+ f* L2 q8 M$ w$ V    //MCBSP,ARM与AMBE2000交互设备% u6 ~+ D6 ~- h& g8 O6 E  I
int fd;
7 c' k7 m7 S/ r unsigned short data_write = 0x5555;
; o. n/ z) H8 U/ m1 Y6 P- C unsigned short data_read = 0x00;7 R. X/ v6 j/ G0 h
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);+ B- ?% m  }" k' R' X
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
" [5 \# f. ~' y6 z. V& y9 F    " A9 y  I* m9 x! n
  if(fd < 0)- J2 o: X$ A) |
  {
! u* U) Z; R! v, T     perror("open failed\n");
' N8 g& R. g& s/ r3 a     return -1;( t) X8 u5 h, w  w  `  W% N# l
  }9 `+ y8 v: ^( y! x: o/ K* ?
  
. {' c+ L, H+ R$ H- F  while(1)
4 n$ J& C% t" D6 }  {
& u; d! r# A# ^, p% ^, ^   
5 s5 a% q8 j/ N6 U% `9 r. e8 @   //AMBE2000每次读写是24个字为一帧( s' e0 x! {9 ?# Y+ u1 o# p( ~
   //写数据时将数据在底层存储起来,等到中断的时候再发送9 _0 d6 v' z# u# q9 B
   //AMBE2000输入数据是以0x13EC开头的
7 C3 g' C8 O; P6 Y1 r. e   write(fd,&data_write,sizeof(unsigned short));
3 ^* ?3 f, C3 }: G   
& b: M- u6 e. P   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
/ M" k, {* q+ ~" c' p   read(fd,&data_read,sizeof(unsigned short));# F7 a3 Y" ~4 G' P  U! I
   
  l. W  R5 N; @( L( D   if(data_read == 0x13Ec)  Q" v& i: k9 Y% d& L; }" o
   {
7 u7 O6 B' t# V4 h) A( Q! T! z5 z   2 |  Q5 g5 ]; R8 U* O* F
    printf("data_read = %x\n",data_read);! Q. P5 W# Z1 f6 |" o; m
   }
5 H9 Y1 W+ W: g) F   0 F& \  l5 n& \% o( g1 s
   msleep(10);
" ?  I3 I; r# l  
& ?1 D& B, }3 J2 v) k% [  /*! R, S$ S4 A) X# ~$ Q
   ioctl(fd,1);   2 Q! K' T  M* @% O# a4 S2 s" u
sleep(1);8 k* @/ Q4 L! p+ \' G
ioctl(fd,0);! t1 o3 p9 \, O  M# ^# N, I1 w, W
sleep(1);1 ?/ q! v5 y% d
*/ - T7 f. h. g5 @0 e/ }4 Z$ M
  }   
! r: i9 w! {. Z% a2 O1 L/ c8 u6 G return 0;1 f* r9 y  C0 ^. [  m. `/ m5 f

1 _/ F" a) X1 ~0 Y  F}
* b& @9 P5 f% ]# m9 Q" |. u  ^: l# g0 H5 b/ e' b6 H
多谢各位指教,谢谢! 急- \  {+ @+ z/ h6 \

  s9 u( P3 ~$ k- Q
( r9 A5 z% w" q" W# M+ C$ g8 y& `
; Y8 G6 b; H  w% P" C9 m
( |. J8 Y0 [& P: o4 z& E
8 F/ |: b1 u8 Z/ o. c* G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 00:11 , Processed in 0.048795 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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