McBSP时钟、同步、数据线不正常 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
4 K6 u! S8 r) A/*
$ a& k: n5 q" ]7 z7 ~0 x * Copyright (C) 2009 Texas Instruments Inc
2 t6 z/ l$ L+ X9 z' m: D *8 v1 P; H5 X( r
* This program is free software; you can redistribute it and/or modify
& r% J0 S. N( }6 k0 r! V * it under the terms of the GNU General Public License as published by. e/ I; e/ x8 C, o9 O' S
* the Free Software Foundation; either version 2 of the License, or$ m. U) R' `- U
* (at your option)any later version.
8 l- z7 S6 T  g" k* i; f$ x *
7 @2 h. n( {6 E7 k * This program is distributed in the hope that it will be useful,) U) W# ?1 P* K* o
* but WITHOUT ANY WARRANTY; without even the implied warranty of) ?; b6 k/ U; p" p
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the0 O' i% B5 D; S' @' ~- g/ q! ]- X9 m
* GNU General Public License for more details.
2 |2 r$ J# Y+ d# b, y% t$ v *3 f& h: J, U# @
* You should have received a copy of the GNU General Public License2 R, X& H" z/ K8 ~& X$ `* ]9 |) v
* along with this program; if not, write to the Free Software
+ H5 C0 C/ n! u: @% O/ y/ [6 | * Foundati
' `+ U! ^( m! U! v*/
3 F  [) I; R% e5 H7 O& F0 b#include <linux/module.h>( Q, p# D: a/ D# _" J$ ~" `
#include <linux/init.h>
) P2 E4 k3 Z7 v0 y#include <linux/errno.h>
) [& Q3 \; K  e" p#include <linux/types.h>3 e0 l( R! f1 P; N$ p/ b+ f' X( H1 I8 W
#include <linux/interrupt.h>
! u( w) P" |8 n6 o" l4 s#include <linux/io.h>1 ~6 E% ]8 J& Q: k1 J/ G* x. E
#include <linux/sysctl.h>% s: _0 X# U3 G# I5 H
#include <linux/mm.h>5 H2 ?: D* T2 E/ |2 i* h
#include <linux/delay.h>. {9 s& `2 P" s! _% I* O
#include<linux/kernel.h>, I0 ^6 g( P0 Q) R# I: j; x
#include<linux/fs.h>7 g1 b. ^" u  R
#include<linux/ioctl.h>) s  h+ v' w8 r$ ?* _' Z3 A
#include<linux/cdev.h>1 y+ X% `7 Q. o
#include<linux/kdev_t.h>
$ s7 @3 H' Y  N" j5 \. v, Q$ p8 i#include<linux/gpio.h>% n# a6 h2 ]# |. ^, H0 G1 i4 q2 F
#include <mach/hardware.h>" ~; J% C# M; U2 g$ ?( g3 a! |
#include <mach/irqs.h>
  m5 C: ]) v/ Z1 u/ f4 S9 q/ |
+ Z& m5 m% L, Q8 U6 x#include <asm/mach-types.h>
9 y% N( z, P! r  r#include <asm/mach/arch.h>" \; C6 Y7 f$ g$ D6 [9 m
#include <mach/da8xx.h># e8 H, W7 I: L2 c+ a
#define  SYSCFG_BASE   0x01c14000
8 h5 F9 g- {8 P2 C! Q#define  PINMUX1_OFFSET   0x124 ' X4 g( O/ C! i5 G& s4 s
#define  PINMUX18_OFFSET  0x168 ( {" ?% @1 @" L6 u5 }+ j/ @$ }6 B
#define  PINMUX19_OFFSET  0x16c0 \% S  r4 v" c4 Y& u
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR) t4 D& D# P. E! [  X
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
9 f0 L8 M2 k8 P8 s. ?; [#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
" W4 K2 n' V' y1 W3 w, _, ~#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
) z; j0 l: m1 \5 _2 i0 Y3 A#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
1 X. h! f& P5 O: S+ ~. s5 v" i                           
" u' @: T3 X7 C" w#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
' x% K$ V7 N  e#define DRR_ADDR      0x01D11000  //MCBSP1_DRR* t8 W' E# O) L9 c0 |
//PSC
3 {" M" x7 U; N#define  PTCMD_ADDR   0x01E27120  
, i; g' N# S8 \; b8 H3 r#define  MDCTL15_ADDR 0x01E27A3C
4 P  b( v) L8 n' J& J/ e#define  PDCTL1_ADDR  0x01E27304
$ D  e+ n" Q  P0 Z7 I/ J//GPIO8 direction5 R+ U/ k, B+ W! @, D# {6 o
#define GPIO8_DIRECT  0x01E260B0
0 B! z$ ]; ]8 y3 d+ \#define GPIO8_OUT     0x01E260B4: J! u) V) i# t9 d
#define GPIO8_IN     0x01E260C02 L. ^( L: N" R3 q& V' y$ e' p4 `
& _& y4 `* ?7 w6 {3 ~1 M
//#define MCBSP1_RINT    99              2 t7 q# l: t) T
//#define MCBSP1_XINT    100  6 O3 b+ Z+ p( D( d4 P
static int MCBSP_MAJOR=239;: `. s+ F  A# x8 H6 r. M
static int MCBSP_MINOR=0;/ s- X2 j+ v8 r, g. S
static int count =1;
: h( k7 G" m- C9 U; M' ?& j* ~
% y" D; q, ?5 g#define MCBSP_NAME  "MCBSP-device"
5 A4 M$ q5 N! n8 V5 {) d: b+ w5 l0 {; j. E! g5 z
static struct cdev *mcbsp_cdev;+ z  l* A. y5 i: ~
static struct class *mcbsp_class;
. P( ~- P2 u8 H7 J! w- Gstatic dev_t mcbsp_dev;4 ^# L, R; T$ f  K( {
unsigned int DRR_data;
  h: d% a) G  k) @unsigned int DXR_data;
/ e/ G/ C. u6 v# _static int mcbsp_open(struct inode *inode,struct file *file)
" j3 n* l5 [& @1 I{1 [# G& {! r) _& ~
     L/ R/ w5 E9 B! \' H% a
   //interrupt enable,initialized1 b3 `" x; }* ^# i- }
   unsigned int temp;5 H- J1 P5 y1 S/ K" x7 G
   //SLEEP_EN(GPIO8[10])---0
. y7 t, H6 G( ~. w7 x! c% d   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));% x3 e) f8 r3 S5 [- d- l
   temp=temp&(~0x00000400);
+ f, Z  F7 Y( c2 s$ E% v# G   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
, V' D3 J" x# j* g# O/ p& L  //RESETn(GPIO8[8])----0----1: A7 |9 c5 [$ O
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 N5 ~1 |) Y6 m5 g- r
   temp=temp&(~0x00000100);! W- d) O- `6 b% c) f9 i2 i9 J
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---06 @. ~# A' X* N+ c+ U. C$ x: f  \
   udelay(100);
' u1 w( d; S" [( P, d   temp=temp| 0x00000100;
6 s+ \: @6 q" r' N7 C0 r, w   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
7 L$ v: k$ i5 \* v: v% ^8 K) g   udelay(100);
8 v: w5 I, w" f/ n! o9 P) t. [   printk("open success!\n");
8 _" g8 k! b; K+ l7 ^1 s  |+ }   return 0;3 Y8 z3 `5 @( Y5 @7 _+ S8 C! l
}
* ]; Y+ \: D" a8 M7 K0 @; s
. ~4 j! N3 I" U! s/ astatic int mcbsp_release(struct inode *inode,struct file *file)' x, \. v3 O- _5 g3 r, s
{, n& |( u1 J. j, V3 O! `& |% I
   printk("release success!\n");" M: c3 _( g, s0 D% a
   return 0;
: T% Y! c( f) Z: ]3 o3 g- [}
) D% r3 c+ ?; Y9 s8 e$ J
: Z7 H. j0 L" S! b- K" pstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)' l% c: m8 `* Q. R- e
{8 r1 N2 Q& g3 }$ x
    copy_from_user(&DXR_data,buf,len);
7 ]1 c: J* k7 Y6 ^$ M    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       ' ?& }& i: x4 ~+ M
    return 0;; Y0 y! I- j/ A- z+ @) Z: S2 j
' w2 [! p  e7 c) q' y% i
}
3 ~( q2 y, U& _: b: G
- q" R& v2 V0 lstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)3 g; [0 A+ i5 j" N0 ~8 n3 {0 G# o
{
7 t. J- D; O* y' }   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));5 B, b* [3 Z( p+ f9 e" L8 [
   copy_to_user(buf,&DRR_data,len); * e+ M% _$ @# \$ R* e" u
   return 0;
$ F* W  z* D) m$ E0 k}0 p) R/ }7 }- h0 ^" f" V

* q- R* L! j9 _
7 @$ i0 Y: a& M, L- zstatic struct  file_operations mcbsp_fops=) @7 T- K/ t# F. `: i( V
{
7 [" p* E3 J) R" S   .owner=THIS_MODULE,9 k3 [- j. A9 d; G/ P' _
   .open=mcbsp_open,
# `' i* X- k# a) W   .release=mcbsp_release,! j. `+ y- @( ]% S2 ~& q( y" K7 Y
   .write=mcbsp_write,7 L1 O" J; X* U' \) }; w
   .read=mcbsp_read,+ q" x' B1 B1 w. v9 u
};
/ e4 F; R7 @4 V- h6 Cstatic int __init MCBSP_init(void)
$ B+ }/ P% ^2 j- {4 ~3 ^# I{2 d' Q5 _% _( s: j+ F" x* _: P# t  ^
   int ret;
! A3 O' @  X2 V0 y7 k0 c3 g   unsigned  int   PINMUX1_REG_old;: C" L* f: M( \5 q7 R! _
   unsigned  int   PINMUX18_REG_old;
! a$ t& M; B) ^   unsigned  int   PINMUX19_REG_old;
: y) O$ ?. ]4 y- m, |% G   unsigned  int   temp;  
) U' H" _! I8 q/ U" r" J   if(MCBSP_MAJOR)6 E6 N& L3 g3 G, [
   {
2 t) K6 I4 }- _7 E1 C      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);4 z5 M& S+ N3 F6 r
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);% r& N. A8 O5 n5 o
   }
5 F: ^8 V  W& @% l   else8 C. l: G! _( l: Y
   {& @" N6 M/ T; V( j4 s- W2 G' _9 g
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);5 s9 r( p. B  r  g0 b6 v
      MCBSP_MAJOR=MAJOR(mcbsp_dev);4 i' g& J8 M- G5 K. k
   }
! x* p# _; c) J   
6 @5 X5 o0 V+ N+ a   if(ret<0)
0 j6 L" E8 }; _; O8 M; h% r   {
4 {6 Z" ]6 _% X% W8 h2 X      printk(KERN_ERR "register chrdev fail!");! B5 s% P6 ]8 g  H5 Q2 S
      return -1;
" r* N# e4 g$ o   }
6 \3 J1 [. |1 X   
2 b. i7 x! \" I9 C   mcbsp_cdev=cdev_alloc();1 o2 v0 U, A' c3 X" `- C6 s
   ( T3 v! m" C7 B" v+ Q. S
   if(mcbsp_cdev!=NULL)
0 B6 \) @* N" g. R/ c' j) e+ Q: B   {+ L/ @1 ^, M4 ~2 j& b
      cdev_init(mcbsp_cdev,&mcbsp_fops);& f5 [, h3 h" X4 n. q$ y
      mcbsp_cdev->ops=&mcbsp_fops;
3 \% Y, @* l; G2 j6 X      mcbsp_cdev->owner=THIS_MODULE;4 ^% n% a1 w2 i3 [( }
      ( L4 ?( v. T# Q, K6 G  Y
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))8 v8 l4 c  |- A9 \' G* O
          printk(KERN_ERR "register cdev fail!");) l( T7 p! E: N
      else) H4 \1 H& T& v" M* `" }4 b8 {
          printk(KERN_ERR "register success!\n");7 z  X; q0 Y5 q% A/ `, [
   }+ g: b; h' {$ d7 p
   else. ]' E, N: c% w! l( U
   {
3 X/ h2 L1 M& L4 ?% r      printk(KERN_ERR "register cdev err!");
  |( A4 b5 S/ n/ R! q      return -1;
: h- v6 @( T1 }  N; c: S   }
. R8 l2 I, A; i! Y: H$ p2 Y   4 J1 h, b( P9 M" Q" s1 E  Q
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
) o/ U+ r2 f* {- f& W% c   if(IS_ERR(mcbsp_class))
/ j/ x' g: E% \   {
& M1 i# X0 j3 F$ x# a' i4 N      printk(KERN_ERR "register class err!");# U+ N4 R- Q) A& p
   return -1;
' r7 O0 N- t. |) [   }4 o3 M7 |: ~- J6 R$ g9 r/ D# ^" N
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);- P' b0 B5 k/ E+ u4 p/ D

6 b1 ~, ?' Z& M- n* R8 \   //PSC1 g& }  ~3 X/ f4 S. Y
   //add Enable MCBSP
* T" R9 Q* k4 `" U   //test
5 a& H* O1 V2 e$ q, u   temp = 0x80000003;, Z! y  \0 Y" ?% C: n  w
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));. h+ K$ x: O* g1 Y0 N  B
   temp = 0x00000003;4 B9 L/ O! n* Q
   writel(temp, IO_ADDRESS(PTCMD_ADDR));' E" S* v5 Y( Y# Y1 `" K2 y
! H0 j( R( X- A6 ^; D" a
   temp = 0x001FF201;: p  s: u  i6 b5 u( n: _0 k
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
+ E6 _( E6 e9 h3 n$ Y  @# y5 {   / o, E4 T! Q6 z& ?: P
   //PINMUX  
" H6 w$ R" f2 R, r* Z! C   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,/ L( C, l4 T/ D
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
$ W, N' t, h0 z- D. O( \2 t   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
' B& c) K" O! |: }' w. B; h   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
, W  o( k& p+ l1 M( j) J& p) r   
: g$ [) s" }5 n   //SLEEP_EN,EPR,L138_SHK1,L138_RC
; _3 }, ~% Y, p) s& S   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  " D, _7 \* q4 n( n; e& j. D
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   / c3 G* m, e% c: Z# k8 A
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);) I0 v- {/ ^% ~
; d' c5 M; ^' \7 p  J: S, u+ e
   //RESETn,L138_SHK2
! u$ \" k* K+ k" |' E   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  + Z3 j" a& e) M9 _; s
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
$ k) Q' {4 G/ {( I. b$ a! ^   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
: W9 U: ]0 l1 f" s  c% V3 G2 _ 0 X+ k5 ?( U: l8 ~' i' l

( U' }, G8 A' U, L" K8 @; l  //SPCR Register( {# x3 S' T! j& S9 T
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset, u& @) ]* N1 J5 z: p
  temp = 0x03000000;//(DLB=0)
# H1 H3 i5 }4 J: \3 H // temp = 0x03008000;//(DLB=1)/ d! I% Z; U3 w, [- Y/ P# z
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset' C6 x: ]( w2 K+ ^. d
  temp = readl(IO_ADDRESS(SPCR_ADDR));- X2 O1 R3 ?+ T! ?' i! l
  printk("temp=%x\n",temp);
7 d: y' @" O& d6 e, M( I  x2 H / s# V) @% H; W. @9 d
   //PCR Register2 r$ ~% ^0 p( H& ^+ |$ L
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
( a* @1 m4 o( e8 m  // temp = 0x00000F0F;
* j( D/ W, ~& P$ P  temp = 0x00000B0F;( h7 b2 \% j& g9 D  a
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized : P, S# s& f0 o( f& s3 U) x
  temp = readl(IO_ADDRESS(PCR_ADDR));
3 X- D3 r/ v& S4 U+ `* E  printk("temp=%x\n",temp);  
9 G$ ^* I, m0 g: |5 c6 a( w   //SRGR Register
+ W$ x$ g4 k/ N. D   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11; @6 m) U7 |  b/ o5 A# C9 X2 d7 i
//temp = 0x301F000B;
) ~5 C2 S4 U( {6 D2 X   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
2 `; g( \" x1 d  temp = readl(IO_ADDRESS(SRGR_ADDR));: o7 v2 P" G7 X& c$ e! u( l
  printk("temp=%x\n",temp);$ `7 n1 \2 K+ ~6 d; o* n& N
   //RCR
3 U  g& v$ U6 ~! c. `- {2 }   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
9 |+ n% O8 x/ v% g   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-03 N, p' b! f7 g: C8 c% Y
   temp = 0x00440040;; ^/ j9 \# [& ?
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
" K5 s$ O- q+ a/ m   temp = readl(IO_ADDRESS(RCR_ADDR));
3 t& `4 r# o$ s( g  |( O   printk("temp=%x\n",temp);
: `' g: Z4 k7 Z7 X/ L   //XCR
, C. G# C( I8 R   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1/ {. }) u; [. j0 I$ P5 P6 ]9 i
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0# z& X4 `" q) o
   temp = 0x00440040;: y1 b; r# H4 e/ a1 Q4 w
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   , G5 [# ~% c& P( `" n8 G
   temp = readl(IO_ADDRESS(XCR_ADDR));1 M3 P* q3 ]  V+ ?. P5 O, J
   printk("temp=%x\n",temp);
' J: t6 c( _0 o" [$ S8 h. }  udelay(100);) C& v: |6 `. `4 S8 d1 k6 Y
  //SPCR Register4 K8 w5 c  R4 v  U: K6 J4 X
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
7 k' ^+ ~2 ~5 R4 r9 y  temp = 0x03C10001;   //DLB = 0 VS DLB = 16 x' t5 ~  h: F; v2 Q2 s' M
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
' n1 M* S6 w" r. s- c( q4 f6 S! M& x  temp = readl(IO_ADDRESS(SPCR_ADDR));
) Q; w( X# q+ T3 P  printk("temp=%x\n",temp);
; |/ S+ A/ u/ s( K: @; S  udelay(100);- \8 _: C0 k# p- e% i

7 A0 \0 R" Q: w- r  //set GPIO direction
6 W% E- r5 f( p( [! f: d4 U   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));) f2 ^! F! q: @& z
   temp = temp | 0x00000100;//EPR----input8 F1 x; L2 ]  g0 _
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
8 K; f$ a' `. t+ P4 K9 G5 B; A6 T   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
2 ?, |$ t; V: ? . N! {) R* T# @8 {* T0 o7 c) J
   return 0;# J' {" U8 l" X/ R; H! ?! D
}; z/ i9 d, T" o: u' [! y" r
static void __exit MCBSP_exit(void)
3 L/ ~4 n0 s. d3 ^' ]# y8 }) c- p{
! a2 K# c4 l, W' k, x* z   printk("mcbsp chrdev exit!\n");
" @; ~' i  q2 J8 N4 W   cdev_del(mcbsp_cdev);
7 ?3 I6 r$ h6 f7 p2 ?; u$ r4 j   unregister_chrdev_region(mcbsp_dev,count);  x4 m1 S  @; ]
   device_destroy(mcbsp_class,mcbsp_dev);$ ^; I$ i- U+ a( q& \  C2 P" ~
   class_destroy(mcbsp_class);- I' @) J# ~* E
}7 R/ C" w9 G$ I  X% J, I4 y  W
module_init(MCBSP_init);
9 q3 ]1 [9 _. O. o% F6 j7 o7 |7 ]module_exit(MCBSP_exit);+ L9 }$ s( [1 p6 x% F" t, v
) i9 _3 F. |, h3 @/ L. H
MODULE_LICENSE("GPL");
! J+ l4 h% c6 z) [2 I7 e: a% L
3 }5 m, |' ~% Q# ~. L我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
" P% r& b  _/ D1 W, a6 q0 J$ T我的应用层的测试程序如下, T4 n1 i# D4 b& @
#include <stdio.h>
) X4 F# g* \" k9 \+ X5 ?$ I6 P* q' Z#include <string.h>! c5 ^3 V* [3 y% P( [
#include <fcntl.h>$ V. p" \3 a) g
#include <unistd.h>) Q8 F, j4 K+ x2 `9 H; @; [
#include <signal.h>/ b; M: q: D$ [: |/ h$ L" U
#include <pthread.h>       //线程
8 W8 u' E% A; b) p/ O7 I1 t#include <stdlib.h>
4 M! r) m  U4 p#include <pcap.h>          //捕获网口数据) c; j3 M7 T5 z$ H
#include <semaphore.h>     //信号
3 ]2 {2 b$ J5 k2 u+ ~1 e, w#include <sys/types.h>     //消息对列2 x  k1 l/ }2 j6 y: Q# X2 }  @; \
#include <sys/ipc.h>       //消息队列8 @" R% V4 c9 R6 X
#include <sys/msg.h>       //消息队列8 u* ^: T* Y. _: C9 e( i
#include <sys/select.h>
+ b& u1 ~0 h% q#include <sys/syscall.h>
# x- s$ b, d" e5 N& M& A: n#include <sys/stat.h>
7 {$ G6 G+ M: V  _#include <sys/mman.h>0 z* w6 E. Z! e3 ?0 a' m2 _4 u
#define msleep(x) usleep(1000*x)
5 \  F6 P" a0 c: w0 @
% U) I; f0 K1 \int main()5 u5 }& L9 E* O! ]
{ $ p% }1 n: O2 N* M
    //MCBSP,ARM与AMBE2000交互设备
7 D* ^! X: J8 O% N9 `4 Z$ h int fd;" l: r9 \. L% k) i6 W
unsigned short data_write = 0x5555;0 |1 C  x+ n$ ?- x& T8 r
unsigned short data_read = 0x00;
" p5 v# P& j- q1 t' d  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
! ]2 Z) O- J2 _+ ^  i4 g+ G- Z //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);  s4 p5 U* d( h# ^
   
. ~. C0 y1 b5 {+ }  ^7 _: Y4 y  if(fd < 0)
+ w9 I" p7 U/ n5 F  {( r. G/ j% r5 c% F8 p* f* s' G
     perror("open failed\n");
4 o& e7 q% }# k  P     return -1;& o1 ]* Q" i: I+ c0 H) p. A
  }) C; `4 ]! q+ M2 K
  . I2 j- ^$ o& C6 j$ R  O: [
  while(1)
6 {* Q, _1 V  T5 @  K0 H, X# e  {% B$ ^5 k* c2 A$ i
   
, A& z* Y. R1 a0 Y   //AMBE2000每次读写是24个字为一帧6 w1 }- X$ t: i/ }/ y
   //写数据时将数据在底层存储起来,等到中断的时候再发送
9 L" x" q' t- \3 X   //AMBE2000输入数据是以0x13EC开头的6 f0 i7 h3 {0 ?( \
   write(fd,&data_write,sizeof(unsigned short));+ |( q( ?5 G8 y0 M$ |: W
   
% i& Z* J$ `# E& e, q   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
; c1 J7 `8 l3 {1 J6 `, p# G   read(fd,&data_read,sizeof(unsigned short));5 ^/ G( E, z! K; B: @) n
   
; E" U( |. N5 Z* m" y5 ?   if(data_read == 0x13Ec); F9 P* B/ d- A  Z* \0 j5 p
   {7 _' t3 B; B# b7 Y2 I
   
) E8 D" V+ o8 z( z: I8 y    printf("data_read = %x\n",data_read);  l9 w5 ]% C$ u& H4 S
   }
1 q6 @+ H- G! J5 o# }! V  E% l3 T   
0 r9 q8 i0 Q& h( e7 f- u+ P, L& m   msleep(10);; [6 |1 N2 u/ }& e# |
  
* M9 T9 E) x7 |+ h  /*
0 e- L. b9 O/ A3 _, Q: t, [   ioctl(fd,1);   
7 }) e7 M. f+ }% V  j* b7 I9 d" N sleep(1);
+ V8 [- {( Z9 ^1 h) Z3 e+ K ioctl(fd,0);, N! O6 d, ~6 M2 L
sleep(1);$ F7 ?7 ?9 Q, P9 h
*/
! C8 D( u+ C  h% @  }   & S% y( w* U* y8 T
return 0;
4 s2 o5 z. v& B ' {' c; T! }/ Q1 u
}9 S8 ^% `* }4 T
0 }! ~# D- o7 r, d) i8 ~( A
多谢各位指教,谢谢! 急
/ r: Y- ]1 X$ Z9 Q+ \% H2 W' {. d4 x& G+ G! o; V' j* ~: Z

. t8 j. T9 ?# ?. `6 T* v( h& Y+ S- m3 I5 a( Q

; R9 V5 r' z8 U# {% n7 f1 j9 r0 b( ^/ ?& B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 18:33 , Processed in 0.046139 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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