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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: ; T  O6 H8 P' b: L* P/ V
/*
8 w6 [9 m6 A8 s  k3 ` * Copyright (C) 2009 Texas Instruments Inc
7 b$ O$ M5 D; v8 [; z4 b) r, I7 @2 ~: W */ I1 C0 V9 ~4 O+ O, v& L
* This program is free software; you can redistribute it and/or modify
  ~* O  P9 Q1 m2 n* H9 J3 X* ? * it under the terms of the GNU General Public License as published by
* J3 a/ A& v$ I0 y% M2 G# i+ W, | * the Free Software Foundation; either version 2 of the License, or
- T+ [* F" V" _) P- n& P8 Z$ u * (at your option)any later version.
  v6 q0 l; }3 c; f- h *; \: Q$ A0 T( b" ^/ G! v& ~9 [' t' H
* This program is distributed in the hope that it will be useful,0 {: S8 a" c. V8 s+ o2 f
* but WITHOUT ANY WARRANTY; without even the implied warranty of3 {3 n( b$ G: ]& g1 |) e
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the) D, Z/ q) g0 `+ Y3 z
* GNU General Public License for more details.4 @: V; t) A1 a. Q
*& a( u- g* H2 C' d( O: N
* You should have received a copy of the GNU General Public License
9 l1 o$ W0 p6 P! s * along with this program; if not, write to the Free Software0 R+ @. M3 A4 k3 |
* Foundati6 I8 G5 k5 c( \7 R$ J; M5 K- {, s8 f- m
*/( ~$ Q# a3 S. Q' A
#include <linux/module.h>; w, m  ~" q; c9 A
#include <linux/init.h>
( G$ t9 T& d1 p/ R! i( |#include <linux/errno.h>
2 ^+ ]& ]- W, t8 W& [#include <linux/types.h>' V2 ]/ F$ M2 _9 g
#include <linux/interrupt.h>
; X( C& n, Q3 v8 d6 @2 c! `#include <linux/io.h>
* m+ K/ l/ `2 H9 [+ v#include <linux/sysctl.h>
8 [: p9 h) x0 h! U, ?#include <linux/mm.h>
7 {) M' B# ^4 c#include <linux/delay.h>; |3 E2 V* g, w& a, g- D( V6 g
#include<linux/kernel.h>4 h6 O1 z" S5 ~/ w  f. a
#include<linux/fs.h>
# @) l1 W% g+ t; }) C2 I  \#include<linux/ioctl.h>! L2 V5 }% [' m( z( T
#include<linux/cdev.h># r- ^$ }, J; O, M+ ]. E
#include<linux/kdev_t.h>: @5 r) c5 j9 T
#include<linux/gpio.h>) H" w( v" L& K& J" H- J- N
#include <mach/hardware.h>9 }" b4 u2 ~6 X: P8 ~; d
#include <mach/irqs.h>% M; a1 b0 T7 Z! }3 r+ n1 v$ i+ `+ F
6 R6 k. p' D# D1 k
#include <asm/mach-types.h>5 C$ G4 h( X3 h
#include <asm/mach/arch.h>
7 r! r% R9 g- y#include <mach/da8xx.h>
# ^) d) _8 @2 `! ~7 p2 p) t#define  SYSCFG_BASE   0x01c14000
$ a9 R' z' @$ @7 S#define  PINMUX1_OFFSET   0x124
. F( `% I# l( R9 T#define  PINMUX18_OFFSET  0x168 ' h' p* z+ a' J) s
#define  PINMUX19_OFFSET  0x16c
7 L7 [* ?/ b" X( ~: Z( x& H#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
: Y, h! h7 s% t% ?' v% N+ E, p#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
: ~, q& W5 [8 L* Z: G#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR/ s3 G7 }, t% F1 t, l) G' t
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR, R! H$ S8 {, o
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR8 c7 x! M% l5 m* O9 p* Y
                           
; k, K! k, S1 S& q* O8 V! G#define DXR_ADDR      0x01D11004  //MCBSP1_DXR0 ?" a2 ~6 V* {9 Z! \
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
" c2 [+ ]4 p, S  s) u% A//PSC
% n5 E, E2 b& w* W$ w0 f. ~0 e#define  PTCMD_ADDR   0x01E27120  + w7 z4 s; [/ U5 z. H
#define  MDCTL15_ADDR 0x01E27A3C
" g8 s* L8 h6 i) \#define  PDCTL1_ADDR  0x01E27304
  v, W! |9 l7 i% X& u//GPIO8 direction
: K) X  z4 r6 g) F) w/ E& t7 K#define GPIO8_DIRECT  0x01E260B0+ |* Y0 Z( F# Q
#define GPIO8_OUT     0x01E260B4  E' f8 ^% R, }- J! s
#define GPIO8_IN     0x01E260C0
) |0 Z' M  w( j' O, q1 k3 N+ m" n: d* ~# Q% e5 @! j) r2 ~  Z
//#define MCBSP1_RINT    99              
" M9 ?- o8 a& ^7 x  h6 d8 `//#define MCBSP1_XINT    100  " J& }, Z/ Q& [) p% b
static int MCBSP_MAJOR=239;' C2 e2 i7 l7 z  q1 W# ?5 `, X
static int MCBSP_MINOR=0;
; d( V( L) M; d" sstatic int count =1;5 D, ^3 {$ E2 _( x; p
# J1 s( T9 n, {9 a% z  v6 ~
#define MCBSP_NAME  "MCBSP-device"1 S) x5 w* `+ g, M( E( E/ Y  Q
7 X3 L2 X" N( v8 z
static struct cdev *mcbsp_cdev;* n" n: u8 j1 Q. r( v3 F: t
static struct class *mcbsp_class;
, Z- u) {4 y$ w4 {& q, r9 {; ~( [. q  ]static dev_t mcbsp_dev;
4 F9 s+ X+ e3 k1 B) d. m+ ]* q! n9 v+ ^unsigned int DRR_data;- B+ V! t! J( ~% A3 k" @
unsigned int DXR_data;, ?: d( X2 u' ~( ^
static int mcbsp_open(struct inode *inode,struct file *file)& _- K' H3 K) l" Q& h, o9 f5 C
{7 K$ \4 r$ A& [; C
   ( U7 d' ]! h% r0 E1 x
   //interrupt enable,initialized
$ {! O- b* f: F' K- {( f$ K   unsigned int temp;% j  ~) N* B9 J
   //SLEEP_EN(GPIO8[10])---09 O# |3 u  y, w* Z, j5 \3 {
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
  g/ l2 b5 T/ z( P7 K) A) `   temp=temp&(~0x00000400);
+ c+ n9 h; M* Q4 g/ @   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
! ?! N. ^3 ~0 G: f  //RESETn(GPIO8[8])----0----1
/ ~8 R- s# U* r   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
+ @. D: @1 V3 U+ f) k   temp=temp&(~0x00000100);; |6 }) u1 H0 ?4 X, T$ U
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0) @" B) j3 }5 D, C. Q0 n
   udelay(100);
3 j6 T' G% c1 q0 O3 J' i4 i: L   temp=temp| 0x00000100;
; ?$ X, ]* M) c/ M6 H! P& M   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1* _- r6 S) {3 C; {# s: ~" C1 A
   udelay(100);
7 a  ^4 G% z. P) A) A: ^! c   printk("open success!\n");
, Y3 I. u1 k6 c2 d   return 0;8 L% [$ l3 F5 _2 [$ C0 A
}
: u3 [- p) ^  V/ D, M/ J3 }# X) K  J0 @. f6 |4 V8 ]
static int mcbsp_release(struct inode *inode,struct file *file)  B! S6 r; R2 E5 q
{+ a) \: C  a. }) k6 W7 T
   printk("release success!\n");
  e4 O: _, u( v) Q   return 0;9 ~- [9 R1 v# Q( Z1 a& E
}- o' t* j1 U- f1 h+ H" R

  w) N2 S5 i0 Z& g1 j; astatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off): @- V/ d. G, u- E7 X5 r
{
9 R! E$ c/ g4 D! o    copy_from_user(&DXR_data,buf,len);
* z9 f- P& A9 @3 i2 a4 r* g7 A    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
+ e% S5 r, _* ~+ {/ @) I    return 0;! w! Y$ D0 k, {/ E4 {

  p; f4 A; l; M}4 T- U7 t6 t' ^: p5 U3 r* R5 ?
: f  U+ Z* K( R! F  \
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
) F7 y5 c8 y) Q{ + B7 A' p+ r4 q! q8 i3 I
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
% v% b& ~, S9 J* i0 c" d+ S   copy_to_user(buf,&DRR_data,len); * {. `" G7 _% `0 b2 f
   return 0;
! {6 Y. N" g  _$ D) f- J: R}  K1 A( j/ L% u3 W4 |/ `

% l5 ]4 k/ p1 r6 m
% H4 r( U; g$ S% Qstatic struct  file_operations mcbsp_fops=! f; Y5 y9 P3 s0 v" r, ]: S: W
{! V0 D5 p4 l2 @5 ~$ i% c
   .owner=THIS_MODULE,
4 Y9 V% I: ^7 D3 S' M4 p& b3 k   .open=mcbsp_open,
1 W) v7 V) o; n6 A. n. v! s0 N  R   .release=mcbsp_release,
  x8 o8 d1 x4 }0 r3 [, V: u5 S   .write=mcbsp_write,! B8 ?3 e, A; H6 I4 }
   .read=mcbsp_read,
, V  T' c- J. F, c) N};
$ g7 d: h3 t4 Wstatic int __init MCBSP_init(void)( r! s. J0 c: k9 T) t" O" {, l* P# W
{8 F5 [3 V2 o, U/ ^0 m- Q2 n% I8 [5 o
   int ret;
: P. [! |& _6 _- `8 y   unsigned  int   PINMUX1_REG_old;
9 C! E7 L5 a  }$ E   unsigned  int   PINMUX18_REG_old;" c: G% l" p. ^/ v3 E: A
   unsigned  int   PINMUX19_REG_old;% \- N9 l3 [6 g* l) s+ v8 d
   unsigned  int   temp;  
- B( X* ^: W8 f/ m, B4 w   if(MCBSP_MAJOR)0 Q7 P. y+ i% i& v7 ~' x6 \
   {
7 P6 ]+ w' b" I5 `% o9 e0 c* Y" O( ?      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);, q9 B0 a# _8 b+ \. q
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);! A8 a  u; R: k/ G$ b* a& o, F
   }% {1 `1 @# z- c7 M3 I
   else) |2 s& k1 ]. B# K0 \
   {
; b8 |1 U0 u" ^4 w      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
+ {+ z4 n  b; `; b' g) Q      MCBSP_MAJOR=MAJOR(mcbsp_dev);) L) e- P: m" V5 B, X' U
   }
" S" Z3 d% r: c   ! J. u5 [6 E: d0 [# \$ _
   if(ret<0)
1 A# h8 \, V& \* r: H: J   {
4 E. X; U+ z) s/ Q3 ]: E: q      printk(KERN_ERR "register chrdev fail!");9 s$ m, [4 Y5 D0 O" u
      return -1;; B, k8 g; s& l" u
   }9 K& J% `2 z5 d8 P
   ' `# s- }' s( T# J% ?1 H
   mcbsp_cdev=cdev_alloc();
) [# [7 s/ B. C# @4 n2 ~   + I0 e( Q! ]# I6 U- M9 A" y
   if(mcbsp_cdev!=NULL)) q& u9 [( f, \) G% Q" R. P
   {) }2 O* q; K% e
      cdev_init(mcbsp_cdev,&mcbsp_fops);1 m! B3 ]. d" c/ r
      mcbsp_cdev->ops=&mcbsp_fops;
8 a. Z+ e- x' x% }$ o( G6 ~. F0 J      mcbsp_cdev->owner=THIS_MODULE;
, |* B& \8 W6 p) G      
# c( P7 y6 f% d* [0 W      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))1 K7 a4 Y: `9 |1 q3 a9 i
          printk(KERN_ERR "register cdev fail!");8 {: j8 L7 J: n: v, c
      else, L$ X2 r7 C3 n2 _5 x# w1 S
          printk(KERN_ERR "register success!\n");
/ M$ Q- }- m5 R% d9 ^- e   }+ a8 r% ^2 ~' h9 H+ o
   else
5 S% Y/ Q! ^2 ]* T) E   {% j. L( {" N; ^+ W
      printk(KERN_ERR "register cdev err!");
6 H. i8 d* f/ M4 X" S6 g      return -1;
/ ~! G1 ~7 N# u   }( S" z8 `; G! \8 i3 b0 t
   
( Z- h9 ]+ \9 J  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);$ w2 V$ u! S, I
   if(IS_ERR(mcbsp_class))1 B3 ~. _: k( d0 m5 f; R1 D5 M
   {3 l: ^* O# Z. E  @9 j$ K
      printk(KERN_ERR "register class err!");
* N# {: v7 D5 X" j  Y* D   return -1;: `7 A* F' O' @
   }
1 {* \' h$ M& U7 q- [% ~2 G   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
1 E; t' A) j- [. I4 z( F0 O' R& H
   //PSC& q) Z' T4 u0 N! t0 R
   //add Enable MCBSP. F/ i8 h& ^; l' u0 |0 K) L, V
   //test+ i! P- M3 q9 O/ o9 l# R4 q% h/ ?
   temp = 0x80000003;( ^  N8 f. \# w$ Z2 P
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));+ h* n8 p0 J2 n3 d: U# ~  i. B
   temp = 0x00000003;
8 f" ]9 n& w2 [   writel(temp, IO_ADDRESS(PTCMD_ADDR));/ q; `. Y& M; o* E" v
% D6 |" M$ r1 e  C
   temp = 0x001FF201;( ^/ n& O& T' L$ F
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
4 A- {2 P; ~& K# d   
9 a+ O  v$ g% I' P, L   //PINMUX  2 w9 W% n9 b. z7 j
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
  k3 r! x/ I3 _3 ]   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  " A% o% d' L6 H4 w" X
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   5 P; P* a* H& m  O- [* L( P
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
, ^: b4 o& T% L0 }   
4 L4 H0 i, @4 B4 ?( c! h: D8 I   //SLEEP_EN,EPR,L138_SHK1,L138_RC: u6 y2 @: A" E% A, s
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
4 k( r! b% }+ m8 s8 l   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   , L* h1 ?' {* b' c$ r0 {" D( s* ^
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
& t: Y  Z+ {4 f7 o6 G4 F( V. J & z; c( `) b0 I$ Y% \
   //RESETn,L138_SHK2
/ p3 f3 q  x' H5 H   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
0 S( B; Z7 U: d+ L0 \   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   6 N" `  u+ {" J. q0 ~
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
; \# f) \0 g- }' O* C; r0 E
. V  ]2 |. A3 l  n
) W! y' N: N7 P/ u! u) S4 l  //SPCR Register6 c& @( }: w8 \' M$ A
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
+ Q0 h" c2 L  j0 a1 V7 H  temp = 0x03000000;//(DLB=0)
3 E) P" y9 W0 Q: b0 m$ w // temp = 0x03008000;//(DLB=1)1 V9 R5 c$ w1 i7 I. X( p, ]+ F
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset% B% B% c4 k% h4 g7 d0 y+ |
  temp = readl(IO_ADDRESS(SPCR_ADDR));
* C' K) X( x! V+ _! m: |  printk("temp=%x\n",temp);
1 C' L) l: N" I' f! C( @ 7 \  e5 n8 b" p9 q8 m: k
   //PCR Register( Y( z1 `4 z$ n
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0! g5 i8 T$ B- ]' F  a* j' d
  // temp = 0x00000F0F;
6 ?* }# P  x2 o7 A2 g% {' U  temp = 0x00000B0F;
# y/ m. h) o: l9 J! m  w  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized & v2 a' H4 e# N. {8 a! i: m* X7 q
  temp = readl(IO_ADDRESS(PCR_ADDR));9 j1 j2 ~# \6 D2 B
  printk("temp=%x\n",temp);  
6 D; |1 `  Q$ \& \   //SRGR Register* K0 r  y+ A& P4 s
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11- S1 v# }/ k& B- f, @
//temp = 0x301F000B;# U* D5 n! t/ t% f3 x
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized . V; J0 l0 z: x6 S9 n" s
  temp = readl(IO_ADDRESS(SRGR_ADDR));
2 _4 a% M6 j' R; d7 [3 k4 F3 x& d  printk("temp=%x\n",temp);8 T+ v% z. F! g
   //RCR) J" I- D9 H# Y, O( V
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,% S9 c. R8 r6 o+ U
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
. z# h( u: {  C7 @8 ^  V   temp = 0x00440040;
0 |. s8 W; Y2 \2 B1 k, b   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
4 \  l5 {# X1 k# r8 {   temp = readl(IO_ADDRESS(RCR_ADDR));6 t6 G+ n1 P- ?3 \
   printk("temp=%x\n",temp);% ~; e# v- _# }0 D
   //XCR2 a, i5 ^& P" F9 \4 p' _* o' `$ A
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1- E/ m5 C: r0 W/ `+ `( D, }9 ^
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
6 [( Z, ?* ~7 Y: T! p; q   temp = 0x00440040;" n8 x6 I6 u. U5 }
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
$ E. X" S: B+ [   temp = readl(IO_ADDRESS(XCR_ADDR));" O; e& ?' S- t+ B5 `6 @
   printk("temp=%x\n",temp);. N. V' o6 X4 p" ~& \- {. r
  udelay(100);
8 O( K9 p# A+ P5 M4 X% D  //SPCR Register5 u4 i+ s2 L# u4 p5 E. r- `* c
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1" F3 l$ {" F& T7 l2 m9 U5 I5 B
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
6 g3 m. L8 _" b: ~- W  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
% t3 B$ n8 E$ \! R  temp = readl(IO_ADDRESS(SPCR_ADDR));
+ |4 p+ C0 E9 Z+ v9 H' M* j; U3 I  printk("temp=%x\n",temp);$ C6 H- i# E7 Y8 Z+ ?3 O
  udelay(100);
" m! `: }& k! D! |
2 d3 w6 d# h+ Z2 V! O1 c  //set GPIO direction% T  W3 _0 J$ x# Y) a
   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
# @# r/ T% k* h* f   temp = temp | 0x00000100;//EPR----input! j2 B7 P- r. h- l
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output7 G* K8 s4 Q% i0 s) v
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
6 p, u+ I, M! v  q/ ]% q
" M8 n0 r, D$ s. s# Y  v; w6 O# l  j   return 0;
3 g4 A3 r) Z( B2 x3 |; z}* E  a% |5 G4 m4 E# F, c( W
static void __exit MCBSP_exit(void)
% a/ D+ f5 D& s) N/ F; j{5 H  C" P; d. L
   printk("mcbsp chrdev exit!\n");
  a: Q3 a' T+ o: T) W   cdev_del(mcbsp_cdev);* d8 s, C  l* t% H) l0 n
   unregister_chrdev_region(mcbsp_dev,count);( P: j3 g& v. r% C) B
   device_destroy(mcbsp_class,mcbsp_dev);( `' o# ~3 j3 R" K0 z6 y
   class_destroy(mcbsp_class);
, U! l1 ]4 ]5 p! B, D2 S$ q}
" H3 _9 g3 S( Y& g+ Omodule_init(MCBSP_init);
: A. K& R/ a* B$ ?$ f, y7 Qmodule_exit(MCBSP_exit);& _% X+ m( M+ ^) m# H

- m: M1 s4 Z# s" K0 IMODULE_LICENSE("GPL");
$ o2 z! H4 F4 F+ t- Q- B9 }" Z# N( C
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
/ M" g" ^, W6 B9 D我的应用层的测试程序如下
% t3 p8 B; K; S. B  n#include <stdio.h>
  i, |; B8 V3 Y; f6 k: N3 e: E#include <string.h>
: `( |. N1 i1 @$ z#include <fcntl.h>
! Y: R2 n5 \8 t6 I! d! @' _#include <unistd.h>8 B0 o. U/ H8 s; r
#include <signal.h>9 S1 w0 P$ H" c/ }
#include <pthread.h>       //线程
8 e5 U5 w" t" d; e. L#include <stdlib.h>; N: T0 _8 ^% F8 \$ C& a  i  e
#include <pcap.h>          //捕获网口数据
) T( u, [0 w- ?& S& M#include <semaphore.h>     //信号
! s; y5 q' V( l3 d$ [#include <sys/types.h>     //消息对列
- K1 z- e7 T8 q1 ?2 d1 f# D#include <sys/ipc.h>       //消息队列+ c1 P* @+ G- Z! X# W: w: G& T& F: W
#include <sys/msg.h>       //消息队列
, |6 o$ W/ G8 @: ]7 K& |#include <sys/select.h>
1 v4 ]. O# ^* Q& o/ C8 `2 b#include <sys/syscall.h>
. S2 N! v: I& ]4 R- q#include <sys/stat.h># U0 a, y) m8 ?
#include <sys/mman.h>
8 ~- j- c2 d0 d0 E" V9 i( s#define msleep(x) usleep(1000*x)
, e2 l  ~+ [5 L8 A+ k7 t* K; G8 {1 K- n
int main()6 K- D0 b6 f7 s3 q. L1 Z. a
{ 4 L1 [( a; a1 q5 t( s
    //MCBSP,ARM与AMBE2000交互设备
' q4 H+ ^  Y1 V& m6 b1 v# a int fd;- B( `. Y9 U3 l! ^0 {, J  d! W
unsigned short data_write = 0x5555;& Z9 q+ T9 X6 g
unsigned short data_read = 0x00;; A) I" z- d; e4 X; q4 @) v
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
* Q0 T; S8 q1 q6 `! d" i' p0 m //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
* z6 g- v+ F. _    . e. n  k! v$ e4 Q" ], s0 h; ?
  if(fd < 0)9 j% C# R  L2 c- f! H1 s
  {
* ~2 S) B: Y( G& K2 e) Y     perror("open failed\n");1 t- `# \1 t% ?! i
     return -1;/ _' f1 a6 F' L* F
  }4 Q( [) j* ]: b3 j" C6 i5 A1 x
  7 |) ]+ p/ W" b& s; j3 F8 F6 Y& _
  while(1)
* ]7 T4 E3 E# \  B  {
, o3 T8 X& |8 K7 u   
, F. P! |& h- ^+ ]) H8 ~   //AMBE2000每次读写是24个字为一帧, {4 Q% l' D$ ~/ A
   //写数据时将数据在底层存储起来,等到中断的时候再发送
5 j& y; ]6 f7 {, L* S   //AMBE2000输入数据是以0x13EC开头的' m, k3 }/ C' P" A
   write(fd,&data_write,sizeof(unsigned short));
1 r7 F# T: p. }/ z, O   
5 o6 Q0 O9 E7 R! a* {" D+ ^   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  + M( M9 D# z. O% d6 j
   read(fd,&data_read,sizeof(unsigned short));" b3 @* B, u; ^% \9 [/ `
   
9 l0 C; y4 G- }  T6 ]0 G   if(data_read == 0x13Ec)
- H" f) C- ^" n* S   {
7 O$ ?: k* r9 A0 P$ {   
6 y6 H/ Y( q1 c4 X. l    printf("data_read = %x\n",data_read);+ W- q8 z. U4 @4 P/ x. O
   }( f9 d0 h6 F, t1 O6 j
   ' o: L  f% u$ d7 p: Z8 u
   msleep(10);/ d* P# M! ~7 ~/ \
  
! ^6 J" Z6 u6 g% |2 ~! R  /*( C; t0 u5 m) v1 b7 r! m
   ioctl(fd,1);   , j: T( a3 h# ?! V- L* V  O0 s
sleep(1);4 J( K+ Q- ^* _% Q) d
ioctl(fd,0);: ]6 z9 G0 O0 C
sleep(1);
/ Z" K" c; W1 y  e- `9 Q */
5 ~9 C8 W  E: `- p) E- J- b- B  }   ' d' b3 [) `- ^7 o4 a
return 0;: M/ T' a5 {* P0 h8 o/ \* [5 ~

  C4 {9 m% q4 M9 T}% j  |4 F3 k2 |4 A8 m

" D2 Y) |2 B+ X/ ^# G5 p9 Q/ G多谢各位指教,谢谢! 急; x! h1 {$ G  Z+ p. L5 q; h0 Q
( `' |: F9 k5 i0 p) P. e, I

& \! G% B# y# n* s  S& }  i# R) q  X
, P- |1 R5 A7 B3 o# j) u6 z

8 R3 [6 h3 \8 E3 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 14:29 , Processed in 0.042906 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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