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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: 6 p9 D; c" r$ ]/ x$ e
/*
/ L# {% S- i/ U; Q& m * Copyright (C) 2009 Texas Instruments Inc& I4 [$ Q6 Z+ F8 U% _9 F' s
*/ d# l/ w2 A) f2 y) `
* This program is free software; you can redistribute it and/or modify+ Z0 {, q& b2 P) _* v( K
* it under the terms of the GNU General Public License as published by
2 n& l* J# d7 I% W5 T+ N6 ^ * the Free Software Foundation; either version 2 of the License, or
9 }8 ^9 ~' B+ f: Z; m1 c3 f  G2 L: d( t * (at your option)any later version.. g) |5 q. X  A* e; c
*! v, g- a$ m$ [- C, K1 k
* This program is distributed in the hope that it will be useful,
7 X3 m0 Q3 ]# m$ E( ?3 T * but WITHOUT ANY WARRANTY; without even the implied warranty of
/ {; f# h: G! V9 Z0 A  b * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 H# e; V8 E2 S" M5 D
* GNU General Public License for more details.
# x; N4 T0 W8 K *: p$ l5 P* J  N
* You should have received a copy of the GNU General Public License
; Z" i9 r9 m% f * along with this program; if not, write to the Free Software7 F& V+ ^2 y2 F8 ~! k! Z! k& U
* Foundati
# c) E/ M, l2 X" g6 `0 P*/. F8 D8 V) F& M1 Y
#include <linux/module.h>
" Q4 q! h, L, W/ y! U( f- p#include <linux/init.h>
8 \1 z$ n+ e! w* j% Y0 G& H! S* Q#include <linux/errno.h>
3 |0 ^8 F% k' ]#include <linux/types.h>1 `; F5 w/ }, W+ k
#include <linux/interrupt.h>. [, Y" V  n3 a% g  ^3 T9 w. P/ c8 c
#include <linux/io.h>
7 P0 o4 A, X) j3 ^$ d#include <linux/sysctl.h># a# S5 _* C- D4 Y0 g
#include <linux/mm.h>% L$ S5 y' u5 `2 f
#include <linux/delay.h>
& Z* e5 }3 c% t! ?7 |2 V" W#include<linux/kernel.h>- _# X. V' L1 ~
#include<linux/fs.h>
; h9 I) {- L% F  ^+ D$ l#include<linux/ioctl.h>+ ?! T* B5 g, R# d: ?! x
#include<linux/cdev.h># b* P8 V0 A5 D9 {" p
#include<linux/kdev_t.h>
+ a' e  H5 u, l  L" F' o#include<linux/gpio.h>
$ g0 b6 M8 o8 T7 U& Y#include <mach/hardware.h>
' S. S- K- w- d. Z' j9 Y0 F5 }#include <mach/irqs.h>! Y* E% o2 i9 x, ~
& Y8 N# m* M' r$ x4 D
#include <asm/mach-types.h>
5 V6 l* u4 H) m9 f4 r- y8 c; t#include <asm/mach/arch.h>" ~; }+ h' d. f4 ]3 Z
#include <mach/da8xx.h>
! y) E- r2 ^, z#define  SYSCFG_BASE   0x01c140004 P6 l$ G+ ?  q
#define  PINMUX1_OFFSET   0x124
- y. l* J( [0 G' n- x4 m#define  PINMUX18_OFFSET  0x168 4 h; `! F; p: u2 L6 I0 z0 g. D
#define  PINMUX19_OFFSET  0x16c
  ^9 T, {" H8 z* [: X1 i#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR3 b( y7 G3 F9 D1 T2 J+ e
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
" s; y) l, @$ [& M1 H% ~#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
8 R' M2 j& }2 t! y8 _: D5 _#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
" b" i8 g1 d! C0 H$ m, h( E#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR; n& L$ S: C. D, `
                            ! T" E  r3 j5 E9 h4 }
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
3 K6 |: E/ \9 A" \/ @1 T#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
5 A8 R: o! h. G3 E* G- C9 s//PSC* D: N% B9 C, C/ F3 D9 d* a) \
#define  PTCMD_ADDR   0x01E27120  
' P0 w% z9 N4 \8 R#define  MDCTL15_ADDR 0x01E27A3C
/ T+ B. ?3 s' O4 ]8 J8 A2 |#define  PDCTL1_ADDR  0x01E273046 t$ ~0 }+ K$ I
//GPIO8 direction
! M& {. [# B4 F/ ^! i#define GPIO8_DIRECT  0x01E260B0
6 b5 l; ~$ Y, c/ H- y#define GPIO8_OUT     0x01E260B4, `: f4 \9 S- I0 H7 N0 }
#define GPIO8_IN     0x01E260C0
7 {4 w3 g; s' P0 i5 L/ E6 D% q, G0 ^! H/ ~9 j2 o
//#define MCBSP1_RINT    99              
# p) y2 `5 `: z//#define MCBSP1_XINT    100  * Q1 Y* A0 w% c5 t$ U
static int MCBSP_MAJOR=239;5 K% a; t. Z$ A
static int MCBSP_MINOR=0;
! \, T- ]7 j% \static int count =1;
0 L7 v* i0 B1 `) B0 Q
( `) C" v( x2 @% Q. p+ v#define MCBSP_NAME  "MCBSP-device"( c% K9 Q+ k: V
5 o6 D8 N: n8 M3 F' q, J( ]
static struct cdev *mcbsp_cdev;: E& M4 u& m/ h0 \$ y, A
static struct class *mcbsp_class;! _  {$ p: H; S* a( i# ]! s
static dev_t mcbsp_dev;
3 s2 e) ~! W/ s; ^; l& }6 }unsigned int DRR_data;$ G- b* L% Y" F1 `- L3 N
unsigned int DXR_data;
) x$ b# ?: P( G% G4 Cstatic int mcbsp_open(struct inode *inode,struct file *file)
6 o# z$ l( I% X' S& H{# r! O) Y2 y3 @4 {0 z
   
/ h; u2 C5 o7 @9 t: Q1 P9 ~   //interrupt enable,initialized
2 ?9 m  C, `/ [; V6 B* X   unsigned int temp;
5 f6 H% V$ W8 p& C$ h) S   //SLEEP_EN(GPIO8[10])---0
9 j# L1 O$ X. p   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));" f. o1 q  f9 I3 G% E/ D
   temp=temp&(~0x00000400);
. r/ P1 u) ~% h   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]3 X7 \5 i1 @2 h+ B% m' O! D
  //RESETn(GPIO8[8])----0----16 w* D% r8 Y) b( [( z7 E
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));( l; B8 |8 L" x: J8 Q4 a
   temp=temp&(~0x00000100);
3 ]- l2 B# b1 H   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0& h! a! l$ A. N/ f3 L" Y  M
   udelay(100);
# l8 |3 k4 o0 {- E2 t& E7 E9 O% ?   temp=temp| 0x00000100;
; e8 l3 I8 |8 V8 I; \- n   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1; a- g- C3 X$ _
   udelay(100);8 _9 r" G7 T# G0 S. N
   printk("open success!\n");
" e; Y( T  j3 m* e1 m  ^   return 0;! o; q/ x. P; m: f
}
$ ]. H3 h( q( @) V; P; `8 F5 ?  ?' J$ k3 Y
static int mcbsp_release(struct inode *inode,struct file *file)
, L7 f/ C, p8 j, M{
* s# m1 Z+ _' X! d! z   printk("release success!\n");+ P& E# o4 v3 f! n2 @) G# f
   return 0;* w! H' X4 l5 q  R  m" P6 A' A8 A
}2 \0 c, O2 A, J% x

1 S# s# q" E. {/ p, C+ w. wstatic ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off): n, l0 p6 t3 y- @" k( _6 Z: C* |5 v. ]
{
0 Q) I& S% ?+ C+ X- R    copy_from_user(&DXR_data,buf,len);3 x" e5 N7 }6 }- h$ V' @2 Y
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
% T, H7 `1 l: S! H) U( n8 E7 b& P6 e    return 0;" l" t# U& C" v8 \4 j

# M1 i# g9 J. Q& c}' v  G6 d3 W3 [3 b* \( n

# E. Q! z: P! j  L! Fstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
  `/ m5 E! @4 F8 e/ m! ~3 L5 X0 N{ . D; i3 l) P  Z3 Q, H7 L
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
8 }8 [* b# O! A   copy_to_user(buf,&DRR_data,len); 6 Z( E4 t# \7 ?4 a$ \, i
   return 0;2 T' P3 V  d  T9 f
}
! L  [: r( B$ j/ o
* {( T7 k5 g% H+ k
6 o5 h" K/ x1 j  u6 E- bstatic struct  file_operations mcbsp_fops=/ W8 B2 w* v  v1 t  U/ F7 o
{
( u" ~) ~" W" i" [" k   .owner=THIS_MODULE,0 x; V$ e  |/ w" H: ?9 R4 n
   .open=mcbsp_open,4 D; Q( J8 w1 J7 _  Q! |
   .release=mcbsp_release,! I: m) l$ y6 E* w+ C+ Z- i
   .write=mcbsp_write,7 D) T9 I8 g; n$ y# i* I/ o+ ~
   .read=mcbsp_read,7 T  ^4 d& Q" v4 k. A5 B! W
};& d: c7 _  P8 ?, \! Q
static int __init MCBSP_init(void)
# G2 s+ |% u( }- g{# R: ^& X" {6 {. m( D
   int ret;
, s$ H" J3 T: r% ]& s   unsigned  int   PINMUX1_REG_old;
8 C" e: S  u" [4 R+ X   unsigned  int   PINMUX18_REG_old;
% T% e5 p# x9 a   unsigned  int   PINMUX19_REG_old;
5 I$ U4 O. ?4 M5 l( m, P# y   unsigned  int   temp;  
* B! r) {/ q  k1 [2 C+ c7 F   if(MCBSP_MAJOR)
2 |( l8 f0 P) y* R8 \   {
8 [& G" q' f7 A) G% Z4 b      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);4 E6 A; \- {; o5 m
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);+ r1 N9 S2 V, v
   }+ [6 _; Y7 N7 o6 j( R
   else* J* o4 k  \5 p, G* X& e
   {6 c1 ^  i' |5 i, h; M% |- S
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);1 N, Z. m' M4 D, v% k
      MCBSP_MAJOR=MAJOR(mcbsp_dev);0 q4 b3 F7 C8 v
   }; L. F& U- v6 V& {
   6 Q0 s: E9 V# t% q- y4 n5 ]
   if(ret<0)& H( ^9 V  C/ ~* ]+ D
   {8 ~7 g- V6 m0 m. m4 ~1 E: d
      printk(KERN_ERR "register chrdev fail!");+ A+ c$ G: t/ W) d9 f2 L" N  ?
      return -1;
, j* Z* }0 B; f, o1 ^   }
8 L$ @5 }4 _' ]% T6 H   
$ B% [8 _: e- _  I4 T   mcbsp_cdev=cdev_alloc();
  [5 V4 ~, I: O# C& y+ Z, T2 m   
& m5 r! T+ L( e2 Q( }   if(mcbsp_cdev!=NULL)
6 ~+ X3 g2 g8 ^) W$ K   {
1 V! d4 V) [  y; }3 m+ j) z& ?7 M0 U      cdev_init(mcbsp_cdev,&mcbsp_fops);
9 w+ V: e1 a9 c2 B      mcbsp_cdev->ops=&mcbsp_fops;, a& J  t! H, Z; N7 M3 Q- ~
      mcbsp_cdev->owner=THIS_MODULE;
$ i- B, D% s/ H# q+ i7 O1 ?1 c      
/ ?. _5 V0 N$ C) g0 p      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
7 A& K7 E3 I2 k6 n2 I          printk(KERN_ERR "register cdev fail!");
& Q! k# X8 I* h+ I. Q      else
) F2 r  |7 v& T4 X7 _          printk(KERN_ERR "register success!\n");
. F# l% a& ?4 C0 l  n% a   }
  q; o. ?6 Q4 U' l" I5 S$ O3 D; D   else
3 \0 w/ M3 H, O* n   {
8 s7 i3 M/ a7 _$ j      printk(KERN_ERR "register cdev err!");
- A! v% g8 P. y) N5 m      return -1;# Q. x9 Y( L* V2 S- e, @! Q
   }. f, o. q/ `' N6 k  H: v* X
   
  D4 y* F/ n  [# O: C  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
6 d+ g" A! b% ^0 G4 ~   if(IS_ERR(mcbsp_class))% e( o% |, D% C8 d3 `" k8 r
   {. `: C% {+ {- l  X( \: @
      printk(KERN_ERR "register class err!");
) Z- g" ?9 m9 u7 x6 l; E' n   return -1;+ R) _4 X. [7 _+ T+ `
   }
# g* @$ \( f0 H+ I8 n# }( D! Z+ V& j   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);$ r) y1 `7 q* S! S" i

6 A) q3 _3 e( x) e2 C1 c. s$ a. D   //PSC
" ~/ A& ]7 N* @& G* ~   //add Enable MCBSP
( f- v% X- W! l   //test
  q: x: G+ J' `+ L0 j$ C3 ]   temp = 0x80000003;  A. f! k' ^! C1 n
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
# j7 ?' G/ t! x" v" T$ X- x* K   temp = 0x00000003;7 l% V0 S6 c+ A0 r2 D  Z
   writel(temp, IO_ADDRESS(PTCMD_ADDR));+ d& [3 Q! o! Q% ?

. x& l6 Y, O! ^& G. \! d   temp = 0x001FF201;
0 J" g2 T8 I- K2 g, Z8 [* x   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
8 B3 V* a+ L, X! [* m3 ?6 v2 {) E' l1 B   
0 T( b1 A5 |% f$ F6 x3 n   //PINMUX  
# c, l" q: A) [+ b  F. y2 T( v   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,- S- I: a  u# D$ u5 z% S
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  
. D, Q: h/ Y5 q  }   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   
1 |+ ?& {8 R8 p; i0 W0 c! O   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);5 }" h/ Z$ w3 {  O2 g! X5 @( ]
   5 u8 e  i, w' U
   //SLEEP_EN,EPR,L138_SHK1,L138_RC8 G1 h! T7 r, T7 {$ l
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
) S  @& ]7 d  a6 r6 r- }2 m( D   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   ' T) j& @/ R! Q
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
; S0 o7 |5 D7 t& Z& s7 H- K
: K0 E1 K4 K! T6 L1 Z) ]   //RESETn,L138_SHK25 X; l+ d2 N" Y9 G* L, g
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  ) }5 J6 [- j0 n, P# v, C
   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   8 S$ Q" S: x7 q. j* F6 z) f
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
1 V9 L' w% r' k7 M
: \: Z. ~( |8 W2 Z. [- B ) x' z4 a- r! `" s
  //SPCR Register
, S, U9 A2 U5 D( ]- m2 H  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset1 F1 g; p$ T) J* @, V" l3 H
  temp = 0x03000000;//(DLB=0)- t$ `" y6 I6 e0 K+ ^
// temp = 0x03008000;//(DLB=1)
- k/ Z1 O9 H- F9 i/ ^- M. D  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
( A' O0 Y" u- t4 F# R* }" P2 r2 i  temp = readl(IO_ADDRESS(SPCR_ADDR));0 x. ?. _, _; X* h# F2 b
  printk("temp=%x\n",temp);
- x; l& Y4 j: q* I7 ]8 q
$ ]1 \# A3 |  t& @* @- a   //PCR Register1 l% L* O0 t' B/ V; l
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-06 ^* \4 a; f- R* G
  // temp = 0x00000F0F;
  Y, x0 N- t( R' x" @4 c  temp = 0x00000B0F;
) }+ r2 R6 \% U. n' D  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized % v# }# ]6 f: ?- u
  temp = readl(IO_ADDRESS(PCR_ADDR));% L8 I. D+ @; o& |. T
  printk("temp=%x\n",temp);  
: v# u  ]' q% G6 W- Z6 z6 ?: s   //SRGR Register
& o; s2 U7 J# L& m- u) N( V   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11& D* D$ _1 L: P0 L/ V, w1 S, w
//temp = 0x301F000B;# [+ p% ^1 p) A
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized
9 Z8 N& W, c- Y. Q  temp = readl(IO_ADDRESS(SRGR_ADDR));
+ G0 n- _5 x; T  m( x' c5 R( P  printk("temp=%x\n",temp);; G) ^6 N6 g: H  B. O- p4 `; u
   //RCR; z0 o" E! ?* p1 C5 }2 T" \+ ^! \
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,9 o. L2 L1 \- y: y6 H0 B( U
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
. ~4 t" w. w# k4 L   temp = 0x00440040;2 I* d$ B& X7 y7 Y: o
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
! t7 u0 ~2 F3 s+ v   temp = readl(IO_ADDRESS(RCR_ADDR));
4 q! X2 S8 v. H' f9 g   printk("temp=%x\n",temp);* |* h* E! n) W, t" N: L# u6 ?
   //XCR
4 ?5 Y  ^% U8 v& q# R5 |   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
" E; J5 i3 |( P, W* y( ?# K/ b   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
9 P3 k9 y& }, k1 J+ ^) s: L   temp = 0x00440040;
5 q3 A7 _: N) D+ p   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   " A1 V' C, ?/ }) G$ Z8 _! O
   temp = readl(IO_ADDRESS(XCR_ADDR));
! n# x. v' z; |; T. ^7 z. _# ]   printk("temp=%x\n",temp);
& v7 M; `" D' {; \. C& S+ F  udelay(100);( c( i9 p0 n) G4 }' h2 E$ Z0 |
  //SPCR Register
0 C3 o! h2 [7 X. B- C) K  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
# `% m7 s( x# n/ ~9 |  temp = 0x03C10001;   //DLB = 0 VS DLB = 16 j; }/ ]  L' G
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled" m( E/ d& A  A8 @
  temp = readl(IO_ADDRESS(SPCR_ADDR));6 e+ }  C/ U# {7 {+ |
  printk("temp=%x\n",temp);. [3 ^$ \* U. p: N" n8 k
  udelay(100);$ s" b/ [6 l2 u- \

2 V( b4 A0 `- l# g  //set GPIO direction
+ u/ [7 J; ?' d1 z& o1 ^' x   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
* u# p# L  f/ d+ E   temp = temp | 0x00000100;//EPR----input( n' a6 T- ]9 r
   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output9 a" Y5 ^/ `% P4 B4 p. R
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); " V( o. S& N' |4 I" [1 E0 y
, {* \' i7 i! _' ?. @; ^) l* T
   return 0;
7 E& K5 f. O) y  b$ z}
. o7 R, f( X  G# W' m; p; @) Qstatic void __exit MCBSP_exit(void)
! l3 G9 F1 }* b$ D" Y{
; G& G4 n8 d8 f   printk("mcbsp chrdev exit!\n");
% \) O, I9 P* }/ M' j   cdev_del(mcbsp_cdev);
$ L1 y( N+ U9 `) N  A   unregister_chrdev_region(mcbsp_dev,count);7 m2 V, v( u3 }; S, t; u
   device_destroy(mcbsp_class,mcbsp_dev);! Y* r9 k2 e9 q7 \, l
   class_destroy(mcbsp_class);
4 M# d2 K) Y2 L& {  t1 i}
3 `1 V; ^1 |" Vmodule_init(MCBSP_init);0 A$ w+ \& R1 m6 P; I4 B
module_exit(MCBSP_exit);  C) t( _; h9 {* T' b
1 E5 o  o  O! f3 [
MODULE_LICENSE("GPL");, [9 h) Y! ]$ c
# f; r: W5 N( u" V3 C, [' W
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
0 L& ^) U& G! f8 s我的应用层的测试程序如下8 @5 J' i& C; [
#include <stdio.h>
' e: M& Z! F. m/ ~; }#include <string.h>
2 u7 l6 I; h( G- E5 y$ V#include <fcntl.h>; g* q/ b2 X" o' b2 w( C5 a
#include <unistd.h>
. o( W# a6 c3 u) F$ A  N; d#include <signal.h>
) `) F) |# f* |#include <pthread.h>       //线程( {) ?0 J+ h0 V/ ~0 b+ ~8 B
#include <stdlib.h>- @# z5 E# F- R0 q  [, N& P
#include <pcap.h>          //捕获网口数据% i* N5 d2 G7 }5 }. \9 R
#include <semaphore.h>     //信号
% z4 H' {* r7 |#include <sys/types.h>     //消息对列0 p+ y$ J# G* ^1 g
#include <sys/ipc.h>       //消息队列* V% p: h# Y" H! J
#include <sys/msg.h>       //消息队列
2 m- j5 U9 ~+ z#include <sys/select.h>: f' A- f0 z0 P+ k2 l6 |$ i9 k! `8 f
#include <sys/syscall.h>
/ ?( ]* s. L# F# F, C' f) i#include <sys/stat.h>
$ ~8 ?4 J/ d, Q3 {#include <sys/mman.h>
( t: s- |/ O  i7 k% T#define msleep(x) usleep(1000*x)9 }3 {7 V8 }1 k* N1 S* v: Z

( _$ i' b% w2 wint main()
0 z1 I( h3 S2 `) @8 h: [{
. ^+ X3 Q2 Z# B$ V+ [    //MCBSP,ARM与AMBE2000交互设备
" L3 l% [: M% s, Z! j int fd;+ Z& S+ j$ V; W! y4 d% d
unsigned short data_write = 0x5555;( A  k$ A/ V3 q7 n& y
unsigned short data_read = 0x00;
% O4 E1 u& @+ p  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);  V% o! U  c7 c- K
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);/ d4 K' j+ s- w0 l
   
: m$ L2 m  _/ |; d. U$ l" {  if(fd < 0)
  @' p& ~3 b) \3 L  [  {( x6 H; U: c7 S9 m4 Z" N% R
     perror("open failed\n");! K" Q3 g! v  n( V& k  A3 _! l$ Q4 ^
     return -1;
$ |2 M/ e- L3 H6 p3 \2 u  }
: J( V$ n- n5 Z1 m* \- |  : ]; G$ n. ]( E4 U$ e
  while(1)! p, h6 k& |. N( V/ `$ M, V: t- P
  {
- E8 w0 M8 l1 }, }   
- e& C# |. e- Q, [8 P7 s# @   //AMBE2000每次读写是24个字为一帧
6 F! B% d2 T; Y6 J" C% Y- Y   //写数据时将数据在底层存储起来,等到中断的时候再发送
# y2 z& E: R- b3 T5 e' g8 z   //AMBE2000输入数据是以0x13EC开头的" G7 H- u9 ?5 {
   write(fd,&data_write,sizeof(unsigned short));0 T4 z( ?2 [* U4 ^+ F3 d8 a9 `$ C
   4 q4 O' {* y: l& n- A1 o
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
+ J1 P+ a! I# G/ W: }' n4 {) H   read(fd,&data_read,sizeof(unsigned short));7 ]. G0 `% o, U7 s/ f0 T5 F
   * J* S) y9 g: J' Z- D9 ?5 A
   if(data_read == 0x13Ec)
3 r4 {0 ?$ [. K5 V! h! H0 P   {
$ m9 G. ~6 j7 y6 r; Q/ Y, j' _   6 N5 t3 C7 M& O
    printf("data_read = %x\n",data_read);  V7 |7 C" G4 K% C) J
   }/ m' t* G$ j. z, H
   
3 [  \/ n& j0 P& o, i   msleep(10);: Z$ z6 a4 D" t7 |
  8 f# o6 n( }, O% J  f5 J
  /*$ _5 S( c, E- k- V7 ?
   ioctl(fd,1);   
9 ^6 v% \8 F9 F2 \5 t sleep(1);' k: S/ A2 ~" L. `- m, R2 l% `) i
ioctl(fd,0);
+ Z# b5 P0 Q$ W1 P% | sleep(1);
" A9 f' t& d' U) F2 v6 H5 C */ ! W/ U9 p# x4 B, B* c2 j
  }   
) H" b& o2 p4 u# Y4 O7 A return 0;% b. {9 h3 m+ n+ ^2 k% j6 W3 X
0 h1 b7 X8 O0 U; L7 Z  g
}2 M+ H! w. R( J: |# T- ]

! D  F: g0 s% m5 v多谢各位指教,谢谢! 急
& h8 |3 d0 R! q6 q+ [( A, i2 U2 w# B% G) q
2 w. e, t; v5 j, ~. g3 \, j

$ ?# t+ ^2 F2 w
' R4 E  I% t8 q9 m: M) ]" l4 E: k  v' b5 q/ t0 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 22:18 , Processed in 0.047412 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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