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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: . C( v! A3 K2 Y
/*
* t0 K) j/ Z4 [5 x# Y/ s * Copyright (C) 2009 Texas Instruments Inc
* y( X9 d, T6 N% _, A *# r6 d' M2 r8 S/ A+ |  l2 t& j
* This program is free software; you can redistribute it and/or modify
, |0 u$ @; `  a! N1 n2 [; G * it under the terms of the GNU General Public License as published by5 V$ a. T; |/ W+ R+ d
* the Free Software Foundation; either version 2 of the License, or
! w" W  j2 j; a( @* e5 V * (at your option)any later version." \2 d3 E' @! u' ]+ y
*: X$ B- V7 i( f
* This program is distributed in the hope that it will be useful,/ B5 z% ?# a& `" I. J* d1 _4 w2 K
* but WITHOUT ANY WARRANTY; without even the implied warranty of
" k* X! _2 M- T * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7 I' ?1 z- @/ w. b4 f0 D * GNU General Public License for more details.
. W' R# N' t$ x5 T' E( M *# h1 D( V$ l5 {1 ^( z* L3 ?2 Z# z
* You should have received a copy of the GNU General Public License
" _7 G0 B& c% ?0 O * along with this program; if not, write to the Free Software* U" x+ A0 {4 z4 v3 K  u# m# f
* Foundati
! `6 Q" P# M4 P. u5 {& t+ W2 h*/! P: [1 b2 Y& q# x$ Q
#include <linux/module.h>
' S! I' ~$ s+ g( K9 ~- a) M#include <linux/init.h>
' A, X  ]* X3 R; Y4 F) p  ~1 o#include <linux/errno.h># _* \7 [$ O' z9 w1 D6 z2 c6 v# ?( ?8 p
#include <linux/types.h>/ L8 K0 ]. f+ p( r1 ]6 D, M1 {( P
#include <linux/interrupt.h>
  K9 h0 K- E3 G#include <linux/io.h>
6 k+ n- ]( {2 U; {1 I, ~8 k#include <linux/sysctl.h>! E# m8 v$ G1 F/ ~% M
#include <linux/mm.h>' V1 b# I$ r9 I9 z0 G  l# w$ R( {% P
#include <linux/delay.h>% v$ c1 }! w* \) o3 O: T
#include<linux/kernel.h>
: B; ~' |4 }) K/ L#include<linux/fs.h>
, e* ~, Q1 d$ I& ~; C2 o#include<linux/ioctl.h>
; S2 o# Y" o* G4 l#include<linux/cdev.h>3 |' m7 E. R& D5 A
#include<linux/kdev_t.h>! |9 O3 b9 u6 F
#include<linux/gpio.h>1 ?6 l4 n7 s2 s0 V0 P4 r4 i
#include <mach/hardware.h>
) X8 _  D( L# C9 w! W#include <mach/irqs.h>& T) g6 v! [& j# n* P

5 M4 b7 R7 N% I2 a; y3 v8 |#include <asm/mach-types.h>8 |8 Y7 g) X* B5 Q
#include <asm/mach/arch.h>
: w+ i8 l6 c& V7 p#include <mach/da8xx.h>
6 x8 s  B; u( y& Y! @#define  SYSCFG_BASE   0x01c14000$ u) o+ v2 Y- K: z/ }
#define  PINMUX1_OFFSET   0x124 # f  f% W; J) i9 h
#define  PINMUX18_OFFSET  0x168 $ ?7 O7 R) I$ z1 k9 ~4 v$ c
#define  PINMUX19_OFFSET  0x16c' w$ f) n+ v2 b) a3 s  a/ S8 ?
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
, p- F1 A, N) i" u( q#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR5 v! a# f7 |/ k3 w$ Y
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR$ m  Y* W( {/ y" K/ N
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR9 S+ _* o" y" o- l6 F% _8 G- s  m
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
. |3 W& u! }/ J  _/ |" C                            4 p, G+ }9 e3 K
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR6 G% h4 z8 n  R( H
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
, {- E. }' D! `, Z% U5 {8 f6 I//PSC& b1 K" Z2 `9 @: J* H7 @) Z- _
#define  PTCMD_ADDR   0x01E27120  4 A1 Q  R. g: u8 F  h
#define  MDCTL15_ADDR 0x01E27A3C* W  b3 X4 L' X$ s! J' Q
#define  PDCTL1_ADDR  0x01E27304# h1 S: v  T! p6 M- J  w9 Y" X) E
//GPIO8 direction' j5 p8 L& b: I3 F/ D6 S% @
#define GPIO8_DIRECT  0x01E260B0, f' e. B8 r2 _3 _7 o) ?
#define GPIO8_OUT     0x01E260B4
' L! x) I+ Z, p5 a6 C, F#define GPIO8_IN     0x01E260C0
' S* k" t7 e0 ^
7 f. b4 Y. g1 S$ x/ V8 p//#define MCBSP1_RINT    99              
% s7 J! a. I, ^* A: o+ X8 r//#define MCBSP1_XINT    100  
$ S& z4 w3 L0 `6 lstatic int MCBSP_MAJOR=239;7 O) {6 j! k7 p
static int MCBSP_MINOR=0;
# d) j/ U& A" R7 N7 }static int count =1;- R2 x8 w0 Q+ @- j0 E
/ G- m! t! _2 k
#define MCBSP_NAME  "MCBSP-device"
7 M+ r, ~$ J# M0 L& _& A* K" C. ]* @
static struct cdev *mcbsp_cdev;, R3 \& Q* c! D" z8 M+ x
static struct class *mcbsp_class;
0 M' }: X0 d1 Rstatic dev_t mcbsp_dev;
: n% ~$ ]& ~8 b% j2 j' [unsigned int DRR_data;
; X8 w/ i/ |$ P3 J7 @/ j& sunsigned int DXR_data;, D6 u8 e* T: G9 n
static int mcbsp_open(struct inode *inode,struct file *file); ?0 r; g6 Z$ y, ~" ~& N4 N
{
% s+ b% e' \4 \. E8 B1 \/ c   
$ J- f* A; }) }5 q. d! F# h" @   //interrupt enable,initialized( @4 m* R: y0 G# f7 S
   unsigned int temp;0 x, U5 F3 ^+ O5 N. ?
   //SLEEP_EN(GPIO8[10])---0
, [" ?( k7 ?; W6 e% x; U9 y   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));4 g/ T0 s/ C0 Z
   temp=temp&(~0x00000400);8 ]6 r1 E2 S6 `8 m0 Y2 L
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
8 `/ S1 I3 u0 J6 P0 r% ]* w" E$ D  D  //RESETn(GPIO8[8])----0----12 Y& A- v/ B- C2 T8 ^
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
' j! Z$ I: T  v9 P. n$ r: M. D   temp=temp&(~0x00000100);+ W: Z7 A9 ]4 a9 u: j5 Y6 P, N
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
1 t5 B9 g4 \9 A4 E   udelay(100);/ I6 L  G5 x+ B# k0 q
   temp=temp| 0x00000100;
, G$ m0 U/ V1 p. F   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---18 y7 @# Y7 g* |, ^/ [! f0 {
   udelay(100);
, W1 ]4 v7 T+ O2 F/ `# h   printk("open success!\n");) |0 ^% X! M  Z1 }4 [4 v1 A
   return 0;
% q2 Q$ Z9 p9 y2 e( q1 h" `- t; R4 t}
% l1 u" s0 ~! B' E, ~8 E9 s- e! q  W. F+ o6 L
static int mcbsp_release(struct inode *inode,struct file *file)7 r& P+ |3 I0 [, K1 F
{2 O6 S8 d; q* A$ D  d* [2 z
   printk("release success!\n");- }0 ]0 t3 n8 U0 ^- Y! U+ }. W
   return 0;
% r/ m+ ~% B$ s& R* I8 F}, T# _3 Y$ T6 X( h/ u
: `) H/ @/ ], t; G# G
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)0 l, n0 u, b) y9 m
{: g; M$ _5 h6 C
    copy_from_user(&DXR_data,buf,len);
; Y! {/ F& u8 \# i- B1 o& D  i    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
2 Q- Q* ~1 x7 H$ w- h* q    return 0;
3 I9 h. t6 G' E: [0 g% ` * N4 f3 J9 x1 T( c
}
( T. O4 R, }/ k8 e0 m( }! r: v6 ^# r* \; H2 R( I- ~) c
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
& z- K: N# Q6 B& N+ z{
. N9 a: _7 h2 O. p, [' P   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));% T% a; Z: O4 D* _1 m
   copy_to_user(buf,&DRR_data,len);
7 E" M3 X9 Z: G$ G, l' ?   return 0;1 S" M* }' h4 H6 r, Z# o& w+ C, E* W0 M
}: L" m0 x# M- n
1 C6 h1 a$ e. T6 S2 ^8 V1 `7 W
( [" D0 F# e' S& q/ w" `" D; O
static struct  file_operations mcbsp_fops=
3 C' O8 R7 n, {) ~8 W' r0 r{
/ U+ {* _* X1 k/ s" U5 `7 r! x   .owner=THIS_MODULE,$ X- k, {. E. d0 I; ]
   .open=mcbsp_open,
+ j5 X6 M% m* _. k, s/ m. Y  o   .release=mcbsp_release,9 u/ _% t0 c7 K, d: I0 a; H
   .write=mcbsp_write,% W2 z9 ?$ |# l6 R" B0 I8 M/ {9 s9 P
   .read=mcbsp_read,
  s1 x% K+ z: \};
& U4 E" n* {+ Y8 t1 g: istatic int __init MCBSP_init(void)
$ y5 h% \! b8 X: W& @{
+ b- V1 b9 {- X   int ret;
& b' s% t" I/ N( w  b   unsigned  int   PINMUX1_REG_old;
1 X$ _4 K% ~, ~0 _  V# `+ \& ]   unsigned  int   PINMUX18_REG_old;3 n. _$ P1 R# g; |& g
   unsigned  int   PINMUX19_REG_old;5 I8 v7 Q0 Y9 P( V2 ?2 y" Z3 }9 @7 E5 m
   unsigned  int   temp;  
0 N5 W/ k2 ?4 j3 B$ [; [   if(MCBSP_MAJOR)* X* H3 |$ \3 a
   {
" o! n: b7 o1 D* W" ~      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
5 K( l$ [; }% G& C4 E8 V/ N+ o      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
5 J3 g7 _, E* g- G   }
) b  {& p# N. S% M9 b7 W6 q   else
) c9 L  o/ O2 T' j* \8 Q   {
* u: n. M$ r+ k  ?2 O& s      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);5 K, F/ f. q) k1 }! N) E
      MCBSP_MAJOR=MAJOR(mcbsp_dev);! _1 ]( l6 \5 s1 P
   }% D% t) B( r6 n+ m+ j5 n2 L
   ! X6 h( u1 {1 R% n: w+ S& r; h
   if(ret<0)% c/ u4 p( u( B7 Q0 E( X  k' P1 z
   {
/ s% ?+ P- G+ F- S# G      printk(KERN_ERR "register chrdev fail!");1 Y2 M) l. {2 |% U, ~" r# l
      return -1;! B; Q" P% F  B0 K
   }
  \' S! O" Q7 q' e   
  l- _% C& K+ I& C8 {7 Z   mcbsp_cdev=cdev_alloc();# m* q4 e' f( c. K
   
  `0 T  G2 a; J   if(mcbsp_cdev!=NULL)
& T' Q& @3 ?/ @3 v   {- l/ X$ w# U2 N/ }6 ?3 _% X
      cdev_init(mcbsp_cdev,&mcbsp_fops);6 y1 h, s' m1 T) f; i$ M( z
      mcbsp_cdev->ops=&mcbsp_fops;' ]6 d" p- s3 I. ?4 _
      mcbsp_cdev->owner=THIS_MODULE;+ y! [$ x4 X2 ?% H8 e5 W
      ' N! q: h: H" o; \9 E
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))4 a5 Q: I1 N! U( Q: q7 M
          printk(KERN_ERR "register cdev fail!");
# S5 C1 ]* d1 `% s3 n/ T) |+ o      else
3 L3 s. S; o7 J" s4 r6 a. p; e" S% [          printk(KERN_ERR "register success!\n");
& V( k5 T; R6 N2 u% N: R  a$ W2 ]3 R) O; ^   }& R! D$ t) d: {5 b
   else4 N9 j6 B& z0 B2 t+ T
   {% n4 w4 G/ x# g2 j
      printk(KERN_ERR "register cdev err!");
$ X" d) |. n! r, [! s8 ~/ Q      return -1;
) S6 j' K; }4 A   }
. b: A1 D' j+ g' p   
% p0 l3 B& b7 |2 Y- h  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);0 v, }( ]# w: n+ I8 w
   if(IS_ERR(mcbsp_class))4 z0 d- a3 _& A0 o
   {
+ y. C6 f$ z: z, h$ B  w$ ^0 p      printk(KERN_ERR "register class err!");# }1 s3 A( x8 _7 v" f+ ^
   return -1;
1 }+ V) L7 t0 S) o' q   }) i) G1 n: ~2 ?
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);8 t: @" A' q. n: b

, L+ V' F4 Y) u* E* D* V* k   //PSC
4 J9 v/ U- V* U   //add Enable MCBSP
8 k; p7 F, t, u- @) E   //test- r0 V6 b7 j5 z& u! L0 X- z" q9 o  z
   temp = 0x80000003;
  }! o+ ^! a. i2 E- v   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
/ X6 r) `) [+ v2 E/ K1 `   temp = 0x00000003;5 Q( Z* t6 j( r" R: m2 H. g3 x+ W2 D! ~  M
   writel(temp, IO_ADDRESS(PTCMD_ADDR));4 T3 A) G, c8 E* V  r, Q

; J& u' o. J* Z% {. W7 |   temp = 0x001FF201;
& ^; P2 F; j  W8 R$ g   writel(temp, IO_ADDRESS(PDCTL1_ADDR));; l! f/ Y3 [6 Q- `- E; k
   ' g8 X. l3 A; L% A5 K, m. c) h! R
   //PINMUX  
/ Q1 J" w8 A8 C) P2 V   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
% L, n, f2 G" ~: Y! z) D   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  5 M- X0 T+ t6 c- j
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   2 w. u0 H! ]9 W5 Y6 \& \5 ]' i
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);" h. |* y  s& l
   6 R6 E% O( p9 N" V" [) O9 a9 d
   //SLEEP_EN,EPR,L138_SHK1,L138_RC
0 B4 z0 |9 |1 A! ]; l) ~   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  ) U2 {, D" c0 d
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
* m' B3 U  ^8 H) w   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
' N2 e$ ?# }  ~; C  T' O2 ~+ v 5 M. |5 x$ c$ X- F5 o! p, o
   //RESETn,L138_SHK2# \# G  N! z9 [+ Z( ?- m; K
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
/ k- ^' w1 p, B" r   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   9 L( R, \5 b1 l& A
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
5 c$ h- Q, f( t7 X3 ~* ]
3 X6 w. b: @7 m% W, d
* X9 X6 G/ [$ o% X+ H  //SPCR Register* y% R! n- n0 ?
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
9 \; b! d* C* a  temp = 0x03000000;//(DLB=0)5 u: M* P  x* W, [* R
// temp = 0x03008000;//(DLB=1)4 S( c4 P$ s$ k2 d# m! i' v
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
( c9 g2 R; F: {- E  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 g# p- O) z! {' Y) G  printk("temp=%x\n",temp);
8 Z/ U0 H4 [4 M% \
3 o( H" O9 O+ ~  I' N- M5 D2 Z   //PCR Register
' S  m" Y* s! h; D5 r   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0$ y+ Y9 P+ h  w8 s$ c" G+ w
  // temp = 0x00000F0F;
7 N, z2 V" k# x  temp = 0x00000B0F;: B; z: U$ K) q/ m7 G
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
2 F0 a' s; }) A; \. ?& M  temp = readl(IO_ADDRESS(PCR_ADDR));
* R2 R* `7 j$ e7 J2 d  printk("temp=%x\n",temp);  ) M* W) c' R4 W* l9 c# Z5 H
   //SRGR Register8 l0 a; N3 [, w% \' Q7 j4 O/ i
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
# d8 c, h: k: [3 w7 J# R. E% O //temp = 0x301F000B;$ f0 l% E3 h4 x
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized * R; r' @9 q7 A2 V6 p  W& o) ^
  temp = readl(IO_ADDRESS(SRGR_ADDR));5 E+ T) C  Z/ g
  printk("temp=%x\n",temp);
, k" C8 f! u2 l; F0 Y   //RCR" }- b6 w: J& v* e- \( Y
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,3 ^+ B: _$ G4 V2 W
   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0  o. k, {4 C5 l! k6 M/ d$ A
   temp = 0x00440040;& Q( k  F' ~0 p1 ~
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   & v1 c; y" m/ `
   temp = readl(IO_ADDRESS(RCR_ADDR));
7 Z% y' Z' \4 A6 [# H3 @   printk("temp=%x\n",temp);2 u. l8 B" F+ W
   //XCR
- b% M5 y% _! A- Z  \   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
, F& M* b) H! b- n/ N5 ?   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-04 T  O4 w0 Z. _9 i8 R5 a
   temp = 0x00440040;
" E/ U; m- x2 ~   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   6 @1 F2 O8 ~; c" H" w
   temp = readl(IO_ADDRESS(XCR_ADDR));
, Q7 y. E* x5 e/ O   printk("temp=%x\n",temp);* Q' V. Z  z; h: {
  udelay(100);
/ u" s. s1 d5 |, B  //SPCR Register
) G' _$ w* R9 j, n3 p. V8 ^/ T  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1% X" p  h# [5 j7 A: {- U
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1" U! |- A8 m5 T% x) X- L
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
  G/ y& k6 Q5 d, r* g* H  temp = readl(IO_ADDRESS(SPCR_ADDR));& w8 N- D7 [0 L  z
  printk("temp=%x\n",temp);* k  y3 t! a3 ~* L! R1 S
  udelay(100);  U# L* H# \7 ~9 n. ~# Y

- |% h9 C5 O% {9 z: w' c  //set GPIO direction
$ S( G' J$ J9 K: |- v   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));4 R" [' }2 y6 y/ R0 D2 x% U
   temp = temp | 0x00000100;//EPR----input
4 v' A4 ]# s2 z7 i$ h" ]3 ?   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output8 n; I9 a2 I6 j  ^5 _# X( w% `
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
/ W& w% z$ O! s# K- G; P
+ m) |, A# g# D+ u% {# T   return 0;
% Q! E% U" S5 w4 j. `}" L1 }( a  G3 A* q2 A+ w) L
static void __exit MCBSP_exit(void)
3 p0 E0 Z* I, I( Y1 n1 B{
! _1 Y" i' K0 u9 }   printk("mcbsp chrdev exit!\n");2 y5 M6 G; s& y- Y" V
   cdev_del(mcbsp_cdev);: e, |( l+ \! g0 `0 q9 Q
   unregister_chrdev_region(mcbsp_dev,count);
) L" g3 U* i5 s+ Y3 e   device_destroy(mcbsp_class,mcbsp_dev);
- l8 C7 h+ S7 F   class_destroy(mcbsp_class);
- _/ i+ w9 U: q: Z}3 l! \- D; X8 \1 c
module_init(MCBSP_init);
! V; U& ]9 i: Y# d- ^3 Z- A( _2 w$ y* cmodule_exit(MCBSP_exit);
+ x' P1 J/ y6 P1 O
3 B) C' F: Y# RMODULE_LICENSE("GPL");: B+ x( f( K4 Y9 j, [# Y- i

0 ]5 Q! @$ W% W& k1 P5 e我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。5 _. i# ~7 a# i6 x3 W2 `; f; H
我的应用层的测试程序如下, g( F7 Q: ?+ M4 O
#include <stdio.h>
, n0 U0 L+ G& q8 m: V9 q- g#include <string.h>
6 ?5 {- s# m- t" c+ O1 f#include <fcntl.h>3 q! F3 h1 L, b6 G
#include <unistd.h># i9 H' {  G" ]- e
#include <signal.h>
& e* [) j- O4 i/ q% L#include <pthread.h>       //线程
' d$ `, [& N* U, T7 U7 M#include <stdlib.h>
* G( @  n1 X. F' q#include <pcap.h>          //捕获网口数据4 J" `2 u; v' m7 `, `  f
#include <semaphore.h>     //信号! I8 S8 X5 J' Z# p5 h6 w
#include <sys/types.h>     //消息对列- }- P% h2 |. R) m+ {
#include <sys/ipc.h>       //消息队列# |+ [9 d4 B5 j/ ?" T& u  L+ o1 b6 ~
#include <sys/msg.h>       //消息队列) \7 ]/ g7 Q& p) O: ]( f  \3 c; G
#include <sys/select.h>
- ~; n% s1 r$ g0 w#include <sys/syscall.h>
4 {7 d6 }  m% V, C$ {4 o, m#include <sys/stat.h>
  U7 R' B1 U' R#include <sys/mman.h>
8 K+ p" O- q6 O8 {9 P7 s* |#define msleep(x) usleep(1000*x)- `0 c3 B" t1 v) e. g/ `* ]
& ~" V0 {7 M) q+ t8 l9 D! t4 `
int main(); t* m( D' y& r$ T
{
+ U/ i4 o1 l0 H+ J; w0 @    //MCBSP,ARM与AMBE2000交互设备) \9 m/ z8 [) T/ I1 d! N( i6 ]1 C
int fd;
$ T! X- ?( l! N5 y3 A unsigned short data_write = 0x5555;
9 s3 P' y  M5 E unsigned short data_read = 0x00;% ]4 }$ x: F1 e( `
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
( ]! F% f$ i6 L //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
2 D, a0 _, @3 _- b$ f- ]    $ c. e: i- H3 U+ P' T$ h
  if(fd < 0)& U" T1 J4 u' X' [2 @
  {1 J# P+ D+ u- p6 O0 m( c
     perror("open failed\n");5 c; T( S5 u3 ?
     return -1;
5 ]; c9 j7 ~+ l, ]0 {  }$ C9 w9 ?& x  ^8 m5 i
  
8 \& \. S6 d. t' {# ^  while(1)
, D4 O3 g9 O2 R$ i1 @2 [4 e$ l0 a  {
* e% k- x0 l% r- v' j: C# g   ; z7 Q' D! p6 I; w  L& [3 A
   //AMBE2000每次读写是24个字为一帧
: \% S9 d% \, D* f# f   //写数据时将数据在底层存储起来,等到中断的时候再发送/ O/ E, w: h% [
   //AMBE2000输入数据是以0x13EC开头的# ~7 x4 b8 k7 l; b5 b
   write(fd,&data_write,sizeof(unsigned short));
4 c( m" ~5 u& {, T   # I* }7 v' R6 }9 J. P: z4 u
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  7 `# b1 \- P9 i' j( N" \
   read(fd,&data_read,sizeof(unsigned short));4 u' l& @' s' z5 h
   
5 T  N; b3 Q3 }0 j) a7 E8 a   if(data_read == 0x13Ec)
; V  f; G0 N- P! [* c; n   {" G. V7 @- S/ _; ^3 V$ d
   
6 b2 l5 `" R: s8 d$ E, ^    printf("data_read = %x\n",data_read);2 A; @8 X2 f7 C  c
   }9 d" W$ j5 J6 d8 k; y% D) D* e
   
4 w0 ~& f& ~# t& r$ o# }" v+ j   msleep(10);9 y, K: Q$ H; F: K/ s/ x6 n
  
% D! s' y% R+ j+ f. \* {- B: ?! Q  /*8 J' c3 L/ {/ m* F
   ioctl(fd,1);   3 c6 @7 i: F. S; C) I- E
sleep(1);$ B/ W( E. L9 X8 S
ioctl(fd,0);
) L, C* s7 f6 W2 |7 J sleep(1);
% l8 [6 @5 c" f7 H5 Y */
$ _. n3 v# N7 T7 H1 v: |  }   
3 J1 r! ?5 l9 s5 }# V return 0;; [  E* Z/ f; P% s$ {0 Y
7 V' ~, t" j& Q
}
" _( L8 J7 b, e7 q% b: q" ~8 E, F. j
/ I7 x; \- n" Y1 ~多谢各位指教,谢谢! 急, |3 C5 U3 Z: O# e( d" _3 o

* \% B0 r8 }2 z
, @8 m) v/ L+ o) s5 I6 j1 v1 |8 r* r
- U4 ]/ J" J, Z
5 |8 A- {' ^7 O8 y( v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 07:51 , Processed in 0.045017 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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