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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序: ( P  u3 o" n4 @  o* E; O
/*0 D. |  {9 o  u
* Copyright (C) 2009 Texas Instruments Inc4 I1 I2 E0 T7 l
*  @1 F, G% e% V6 \
* This program is free software; you can redistribute it and/or modify
+ P; t: n+ K( s2 i1 g% C7 h% K0 I * it under the terms of the GNU General Public License as published by
4 N, g$ a# r! b+ S* C5 ~$ M * the Free Software Foundation; either version 2 of the License, or
! I& s! M+ q8 d* {9 F9 w * (at your option)any later version.
/ z" T, ^8 p: C/ B) y, | *
: D$ B/ q2 a9 j* y& _5 ^1 P% V * This program is distributed in the hope that it will be useful,& q( X/ g5 f8 [3 S! L# W( M
* but WITHOUT ANY WARRANTY; without even the implied warranty of
) ]- r+ Q2 F' G4 x' ]! y+ h- K9 T * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the) o- W6 ~- H' F1 B3 y1 ~- D
* GNU General Public License for more details.
1 v7 L; N7 u' V3 L* D+ C *
. n* N6 N% K$ k) a9 N8 i * You should have received a copy of the GNU General Public License$ D. K/ v, Q- I+ d% M
* along with this program; if not, write to the Free Software; j0 r# k8 x  _4 q- Y  s8 A
* Foundati: s" h$ F) ]  W
*/
; W1 M; c; s  A3 C2 u#include <linux/module.h>
. w. C; i- r7 f#include <linux/init.h>
6 }8 ^3 D# D  A) N/ ]#include <linux/errno.h>$ Z' P! i! Q2 \7 W
#include <linux/types.h>3 [- [7 _, \' d! u* p# X. c
#include <linux/interrupt.h>7 j$ o( x% M( R$ t! |, t
#include <linux/io.h>$ _* c' \. U8 t+ k- L" w1 v8 }3 z
#include <linux/sysctl.h>1 o! s- C$ w  y+ d( [
#include <linux/mm.h>( U" s9 ^# Q" m# w! d) i
#include <linux/delay.h>9 u6 \$ ^2 ^# N2 H( A9 U2 h
#include<linux/kernel.h>3 U  I6 |6 @1 L. F( B! Y
#include<linux/fs.h>( W! S; O( `! j% m5 o" [
#include<linux/ioctl.h>
7 i, i7 s: b6 A, V1 B( X+ ]) ?#include<linux/cdev.h>2 @* i. O! f5 g, ^
#include<linux/kdev_t.h>% C6 U, g' i5 _0 H0 B5 g( _+ P
#include<linux/gpio.h>
5 J/ C+ K2 W" Z$ B; q( D#include <mach/hardware.h>2 \5 l" L( d9 s% b* G1 k
#include <mach/irqs.h>
. v4 k6 w1 v( u4 F8 Y+ r% t4 E3 c1 Y5 T; Y' w; Q
#include <asm/mach-types.h>
" k6 V, ~8 D) p' {1 q) H8 C#include <asm/mach/arch.h>
8 ~6 U/ m  Z$ m#include <mach/da8xx.h>4 ], ]; \# ?7 f2 F  c
#define  SYSCFG_BASE   0x01c14000! A) s% f- p0 D
#define  PINMUX1_OFFSET   0x124 ; i, R. o$ W6 @, O* Q9 L5 q* k, `9 ?
#define  PINMUX18_OFFSET  0x168 2 C& h/ g$ l$ G1 d' V' P1 Z
#define  PINMUX19_OFFSET  0x16c( ]: G1 z/ u- D% c  V- k
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR
( w) q- X1 D2 M* n% \+ n  {) ~#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
, [& g; t6 ?7 Z6 e5 @#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR9 l* _' J5 G* e! ]
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
% J% I: z4 |. L5 }#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR; q# c8 o9 g# l4 x0 ?
                           
  V( f3 J! `) x#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
& g# n! u7 a8 ]' B#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
# X& K  Q8 i: a6 W2 m' V/ D4 G2 c" [//PSC4 k  h5 R/ h& L* h4 ?5 c
#define  PTCMD_ADDR   0x01E27120  
! P* X, o" d* U/ b#define  MDCTL15_ADDR 0x01E27A3C
- U; V# L, m" t+ l#define  PDCTL1_ADDR  0x01E27304
, p+ e& Y9 q0 b//GPIO8 direction
' ~& Q; t% e% J#define GPIO8_DIRECT  0x01E260B0: I$ j5 F  E4 |+ \( I; y% R* F! y
#define GPIO8_OUT     0x01E260B41 K/ q3 X9 N# E
#define GPIO8_IN     0x01E260C05 c9 `9 D0 N% D+ z. s* E. P2 S6 ~

! Y0 I! [! q. {$ f8 x6 V//#define MCBSP1_RINT    99              
4 C- C3 i8 v0 c//#define MCBSP1_XINT    100  
6 ~: p3 M) W* g9 V; Pstatic int MCBSP_MAJOR=239;
! N7 y( B5 F3 U" j5 s4 _' g: \static int MCBSP_MINOR=0;; r5 J/ n0 Y& ^2 Y. U0 K
static int count =1;* u' _* w8 a+ `( j/ O  q+ W- k
" a2 F+ @8 N- u$ w" \6 P2 }9 _3 {
#define MCBSP_NAME  "MCBSP-device"/ z3 I0 f5 V- z' E# e8 Z7 b5 s
  c$ B( Z5 D4 E; c& h. e$ n8 b
static struct cdev *mcbsp_cdev;0 V+ S; r0 J+ J' D2 q
static struct class *mcbsp_class;, i0 Q. a' V1 q/ b4 H9 Q
static dev_t mcbsp_dev;
" u  F) s/ d* e5 I% {unsigned int DRR_data;: [4 l3 @3 J2 J! W
unsigned int DXR_data;
: U$ T* q7 I3 |: X2 sstatic int mcbsp_open(struct inode *inode,struct file *file); K* v5 g6 `' m& p, U
{+ l0 ^! z5 X8 a, O4 n5 P
   
# D, F* y8 X: e/ u: W2 N   //interrupt enable,initialized
* w$ X. c' _& O6 |4 M7 Y3 A   unsigned int temp;2 m% t6 s" o2 G
   //SLEEP_EN(GPIO8[10])---0' |, G7 n! e) W4 y5 O* b. z- `
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
/ @* b/ {4 B' m/ A  q   temp=temp&(~0x00000400);
+ V  u! a2 W2 X( I3 Z   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]- ~& B$ S+ N. R6 x9 Q* v1 |$ n- q
  //RESETn(GPIO8[8])----0----1
  @$ _- `3 c  i# Z, p   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));9 C! o4 P% D" E: K2 L
   temp=temp&(~0x00000100);: q6 }( F9 o: t# W( U
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0
- c. C* _$ e: Q5 \. H   udelay(100);
/ ^. |) C- d1 X) N   temp=temp| 0x00000100;* z. s; j3 ?( t, @! x& j2 J
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
. V. {/ y) ], d. m   udelay(100);
) \7 i3 m( _" d7 F, ?) C   printk("open success!\n");. a9 w, W5 `$ i
   return 0;+ E) R/ f) T% ~7 l  ~6 G8 u) N/ e
}8 V0 Q! }( `' D0 {0 i: R- [/ Y

9 f8 j3 e# n: _6 I8 @" rstatic int mcbsp_release(struct inode *inode,struct file *file)
5 h. w( j7 I1 D% ~) h9 z{  w3 I# J3 v' Y" |$ j
   printk("release success!\n");
8 K* @  j) Y* {& P- x  S, E, B8 A   return 0;% D. r# C8 @) M8 t7 L. K2 D& q0 e
}( U. O7 f& I  A$ ~
/ ^) C  f. Y7 A4 J) r; [9 t+ O: x
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)$ Q& [* \! h+ E# p
{; [  j: ~3 H% d' {' p6 y
    copy_from_user(&DXR_data,buf,len);
2 n8 i$ D/ t. |- l    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       4 E; ^9 ^  d, F' @! ^
    return 0;
6 X" S- Q; K" i' y  P* Y   L4 }! ^$ s4 x8 f
}
% n. `# p( q+ b1 j" D$ `. X* O! P
* ~, h" F) z, r( i8 Gstatic ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)9 ?' k! A- S; i  T
{ 8 d, _5 t) K- n; g$ J# x* Q- k
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
1 b3 w: ?* E6 ^& P& A  [4 _   copy_to_user(buf,&DRR_data,len); + @' ?0 y' j# N, b; |
   return 0;
% C* o, {  |( N, _; ^' b}
( L+ M2 H9 ~' u, a
) w# b% r, m) g% l- r2 l& j5 |0 q+ ?; s( u) L7 s
static struct  file_operations mcbsp_fops=9 \+ j8 b, h( r# z
{) P$ v, [& g4 T/ R3 ?+ p8 v
   .owner=THIS_MODULE,
9 O1 b- U0 T, j4 Y   .open=mcbsp_open,
4 @( [8 }( n$ {7 Z7 _- z   .release=mcbsp_release,6 r, ~7 c$ U% D; {; Y
   .write=mcbsp_write,
9 {8 }/ r- S6 b7 q" D! }+ E   .read=mcbsp_read,
" ?+ Q- L, Q, W3 n};) C1 Z# s4 w  A  r) y9 A
static int __init MCBSP_init(void)) C& O8 S% s) o+ E  e
{
. N5 f# W" c5 _! @0 a# U. N  Y4 x   int ret;* s( o- f, t/ r9 O
   unsigned  int   PINMUX1_REG_old;7 t9 f0 i4 t" U# P8 N; ~; s# T
   unsigned  int   PINMUX18_REG_old;
3 D' R) g" I5 |3 |' l0 K   unsigned  int   PINMUX19_REG_old;
8 |& p( F  c1 D   unsigned  int   temp;  
* y! b. w; B$ ?8 A$ G   if(MCBSP_MAJOR): o' V1 G( C- C  K
   {
' Z0 ]' W* y6 J      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
5 V. d1 H$ y7 f4 }5 K      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);5 ?; Y% }: P3 j: {: U
   }+ K" b7 D+ K- J& l) X
   else2 L2 i+ A: y  j6 [% j9 n1 Q/ c$ n
   {
, j* B+ G% C2 A) X+ x/ t      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
9 W$ s+ r% T( h$ ~6 e: J( ^1 y      MCBSP_MAJOR=MAJOR(mcbsp_dev);  x7 _: \  x2 `0 x: U9 b5 ~/ g* m
   }
7 S* ]- x( [- @* {. V, q8 b0 [   , u3 ]6 T* _9 F! ]4 ~; K' U6 y
   if(ret<0)
6 M7 k5 D4 m6 P. m3 _2 c   {
4 R, ]' C1 n# j' }/ m4 j0 E# D      printk(KERN_ERR "register chrdev fail!");
9 |! A1 D- N+ N( b      return -1;$ q7 }( g- t6 z
   }. e% O' j& E1 B' {% s
   
7 z, i$ p; R" F( _' D8 A   mcbsp_cdev=cdev_alloc();) }+ u( G, F. S
   
& p' p! j# Y& ^$ i: d5 H. S. S* m, j  A   if(mcbsp_cdev!=NULL)2 \( a; Y* T6 n- K) N; h+ j9 b
   {
8 V3 Y: m7 s! ^1 f$ a9 Z      cdev_init(mcbsp_cdev,&mcbsp_fops);9 G# E' e8 Z( A+ O  M0 r; V
      mcbsp_cdev->ops=&mcbsp_fops;6 ~" V+ L6 ~( b
      mcbsp_cdev->owner=THIS_MODULE;
5 p) W7 g, z1 G4 W      0 P* \- Y! y$ G: f# ]
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))/ E  E: X; o% C& N! r6 S
          printk(KERN_ERR "register cdev fail!");/ Z/ q) l  l- o& Y8 O
      else) n/ n' C  j, ^& H' u$ f
          printk(KERN_ERR "register success!\n");7 V8 m0 F4 J3 I" x, a& @
   }
* K: o  G, v- x7 a   else
1 b7 U2 {/ G9 ^. i   {
1 Q+ }5 h! S: f6 [  _* z! [9 i  D4 H      printk(KERN_ERR "register cdev err!");
" |2 e0 E# h1 ^+ j( n      return -1;- Y5 v, @6 K/ ]6 M
   }) B/ d4 ~/ e( C5 @* [
   8 D8 M0 R7 K6 D3 h
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);. K% B* Y! b1 o6 s# X
   if(IS_ERR(mcbsp_class)). K% p( w) ?. {0 R8 U
   {
; d# R+ L) c8 h4 Y; s' L      printk(KERN_ERR "register class err!");% A" r0 f, y. K1 \+ D5 T* o
   return -1;. k9 \2 K' w  T
   }0 m; J# `; g3 \3 n! w; z9 |& I
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);6 O# _) C, m6 z7 X: [3 q2 K# |
3 V. i6 p. ~: M- S' Q+ p
   //PSC8 I$ ^, u/ F0 M- T! J& J
   //add Enable MCBSP
: y, J1 A( C, U   //test; T6 i+ b) u) t& B7 ~
   temp = 0x80000003;
; s+ a/ s4 W1 o1 T* x   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
/ p1 Q/ S( v4 I8 d/ J; ]- K  j   temp = 0x00000003;
% @# i3 B2 H9 `7 u$ X6 t   writel(temp, IO_ADDRESS(PTCMD_ADDR));
0 h1 q7 v! M! g  H+ Y) e2 g 4 q0 [; M& F7 |) N
   temp = 0x001FF201;
; D0 ^$ h$ U% `   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
/ Q' B/ S3 g) k$ A: U& S   9 \  I; `* d5 @5 v% ~
   //PINMUX  3 e- r' Z: _- `) w
   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
( G2 j6 d' z8 d% P   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);    ~+ R) o# x& \* z2 j" |
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   . N  O4 b; t' R- w; [  R$ [
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
5 U9 c* e7 h+ U9 v4 r   
# Y! n, A4 [8 r& o- O1 F0 Z   //SLEEP_EN,EPR,L138_SHK1,L138_RC" E* f6 W/ B* f
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
0 H2 y* P/ ?  k. J3 Z0 R, B   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
" y: E4 T3 E' H5 W, P: |   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);! k- c8 D- U- q6 H' a
  k  o% U' i. w. n
   //RESETn,L138_SHK2
- {# y8 s6 P: a   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
) f7 N- W% L- n6 V( j   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   
- _" _% r8 w1 p& ?' H! U* ]   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);
& f0 T) D% m! D3 ~ , ?/ K" D- V/ k2 [, W
; q4 Y' o; N4 ^) ?- z- y
  //SPCR Register- w5 G: S" M( X' e6 @% U  q
  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset
4 u; X1 q: ^8 o8 d2 @, ~  temp = 0x03000000;//(DLB=0)
1 m) D0 }7 ?- N! i4 g // temp = 0x03008000;//(DLB=1)
: X& E  \8 P7 b  k1 U- B& M: }  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset" @  J0 w8 ~8 s1 F! `
  temp = readl(IO_ADDRESS(SPCR_ADDR));( f3 j0 b7 S. Q
  printk("temp=%x\n",temp);, `7 f9 R2 V+ v% Q0 S# F% F
6 y; e) k( \! ?. ]0 ?( ^: f8 Q
   //PCR Register
4 i. p( m% q# P9 j   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0/ D, I2 H6 J  p* z  N/ P+ _
  // temp = 0x00000F0F;+ G7 q9 X; p3 w
  temp = 0x00000B0F;
! x' k7 [. Y  q7 H! N$ w: q+ m  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized ' Y+ F4 }4 e( F4 E
  temp = readl(IO_ADDRESS(PCR_ADDR));- c  I0 G1 B: M' _. N
  printk("temp=%x\n",temp);  
7 t( s7 g2 I% {+ E. M* T   //SRGR Register+ ?' H5 E$ A9 b6 X7 S
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11, ?: q* @0 V' @
//temp = 0x301F000B;
$ J- W+ _5 V( }, Y2 b7 q   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 7 k% n$ U& M* M! ^
  temp = readl(IO_ADDRESS(SRGR_ADDR));; p$ z* p, [  f% X# V3 T
  printk("temp=%x\n",temp);* t" z2 a2 X# o* ]* r  v1 f/ e
   //RCR
" k. [9 C2 c% }4 e4 }# y" c   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
2 h% r2 V9 Z9 D# ^   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0- x) Q% T* o. f8 B0 ]' O+ m& z
   temp = 0x00440040;
! U  J: }. Q4 V6 b; ?   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
* f7 B4 m. e0 |9 k9 `   temp = readl(IO_ADDRESS(RCR_ADDR));
0 h! A6 y" `6 k* X( W; }$ @! l) A) m   printk("temp=%x\n",temp);2 b$ L. n5 k5 r
   //XCR9 p7 k8 W' _) W3 n  l
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
* W. k3 ]) C; T+ P   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
: U9 Z1 V5 K( \- f+ A# \9 H   temp = 0x00440040;* R! W# U) N1 g
   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   ! c; P. X; i7 R$ o
   temp = readl(IO_ADDRESS(XCR_ADDR));% J5 l- L5 |3 i/ a
   printk("temp=%x\n",temp);
) j8 Z  i! v- a3 j  udelay(100);
0 z, G/ [$ a9 a1 ]  //SPCR Register# P: S' Q4 c: c3 |% |4 ]; x
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
# ~- P+ _" L0 \! i  temp = 0x03C10001;   //DLB = 0 VS DLB = 16 Z4 T, Z; k% G" h2 {" b
  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled
1 q) {1 \% S, A7 w3 @, N: C  temp = readl(IO_ADDRESS(SPCR_ADDR));. V9 t! `$ {& g& h8 @
  printk("temp=%x\n",temp);
: C1 G, A6 o- Y8 H9 R' c& r" t  udelay(100);; D( N0 |. L2 l+ k
! h' z. g( A. Q# M& E
  //set GPIO direction
' Z3 S" d$ R1 Q   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));
  H1 c( g7 h  O, a   temp = temp | 0x00000100;//EPR----input
- r; w' _  g. b; U1 R   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
3 i8 D. r' T* U0 w6 t6 B  V% X2 R   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); ) Y) l% O  ]0 {8 H% ]" {% V! q8 `- ~

7 [, ]# s* F. e! c+ j/ [9 V   return 0;$ H+ L4 j$ A8 M) b
}
" {9 ^2 _$ {" F5 T3 i1 `# M' v) jstatic void __exit MCBSP_exit(void)
. z& w7 ^$ ]# _9 C, K$ H) G{
+ [6 {4 r: K! m3 e" W( v- I( e   printk("mcbsp chrdev exit!\n");
) Y1 E9 O. ]0 Y! K   cdev_del(mcbsp_cdev);# G  B! C  i4 b/ J! t( H9 X2 S8 m
   unregister_chrdev_region(mcbsp_dev,count);5 G5 w$ @5 j! r. ]; L3 t  M
   device_destroy(mcbsp_class,mcbsp_dev);
- n7 |" ^/ k6 r: s! T( [+ n   class_destroy(mcbsp_class);
5 [: t- m8 H) m- y- Y}
7 B2 ]8 P1 X% D( d! cmodule_init(MCBSP_init);
0 ]( j/ m/ a; y, Omodule_exit(MCBSP_exit);
: H8 @% h9 ?: @; r1 t' p
; Y1 V8 C, N) M. t4 d; x# n: qMODULE_LICENSE("GPL");
) ^5 ~7 w/ i4 Y  p! r' {- Y
5 T, _) l1 ]) f9 i$ ?我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。
" z) j: ?. N6 F$ G' N  R: S8 a1 K我的应用层的测试程序如下: C7 X! n6 `! x, V/ v
#include <stdio.h># P2 b  L- j3 J4 ~; J( d
#include <string.h>+ z/ E3 ^) H; A4 g: M
#include <fcntl.h>
8 `/ U; g7 r. D+ G# t# j#include <unistd.h>
, Q& I; X$ P! y$ ?+ r#include <signal.h>
# y5 j5 p$ D: q+ [" V7 J# c+ R#include <pthread.h>       //线程$ c- b7 A7 U7 a$ ]! m2 U
#include <stdlib.h>* B4 C: S. I5 N% o, i" O
#include <pcap.h>          //捕获网口数据
6 d, y# W- [1 f6 T#include <semaphore.h>     //信号
& A+ H( r. y) s#include <sys/types.h>     //消息对列
% l$ i' a0 z9 K#include <sys/ipc.h>       //消息队列
4 K$ z, X: X$ Z% V" J) r#include <sys/msg.h>       //消息队列& s" ?% D+ }3 V7 w3 V- n' \" |
#include <sys/select.h>
8 S$ l# }4 o2 }" r! r2 U' U#include <sys/syscall.h>
* a" C  \& X* H7 v3 C! ]#include <sys/stat.h>
" [: L6 I# i; c& l- ^9 `7 G, R: p#include <sys/mman.h>
& [6 f* i( ]0 a4 y! w" M' c6 T#define msleep(x) usleep(1000*x)9 J" N+ W! N; ~7 h1 v% a+ p
, B9 p5 W& c9 K9 O- Z/ d
int main()
7 @: ^7 ^) l7 {' e" h{
, c. p& `8 E' J6 U, i- C% m  n$ d( ^    //MCBSP,ARM与AMBE2000交互设备
8 I* X- o; v4 _ int fd;
3 T; S: V1 i& t unsigned short data_write = 0x5555;
# ?' V0 S4 |/ L  ~: p unsigned short data_read = 0x00;
: L  J( T. R: e% I  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);: H7 Y; Q5 i+ e' D
//  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);
' A$ V0 g4 _2 L6 X9 E    ; }# f, t) z8 J/ U
  if(fd < 0)
* k1 d5 b+ D# M) Z* n6 U  p  {8 T, C/ d' j. _' [
     perror("open failed\n");! ~2 J6 m7 S$ n8 w: O  ?* V4 \3 ^
     return -1;
  Q' N2 \2 r: F+ U) `" {/ x- s9 w- t  }4 X+ |0 m8 i: `( A  ~- X$ N! \1 u
  
0 o" k' N* s- n  while(1); w6 Z4 k+ |9 K" N( P
  {
% |* t& ^( ]+ u  f' ~% m# Z" v6 W6 q   ! m  F, _0 v' ?! j* Q( I& U+ `  X$ C
   //AMBE2000每次读写是24个字为一帧  H# O" h! Z+ ?7 G1 N) [5 t1 O
   //写数据时将数据在底层存储起来,等到中断的时候再发送
9 K* y- k$ F! [" n1 ?   //AMBE2000输入数据是以0x13EC开头的5 d7 U! o- O" T, x- J
   write(fd,&data_write,sizeof(unsigned short));! `6 m- R+ [1 H
   / J1 d) {% q; O( Z
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  ( ~, ]! W/ v5 m8 {+ w) V
   read(fd,&data_read,sizeof(unsigned short));! N- J9 F; {. P$ S! L! D: m' R
   
6 V5 Z9 ~" o+ c! U6 `9 p% y; Q   if(data_read == 0x13Ec)
) g1 c0 \1 D* W. P& l% f; N   {7 O6 b" N$ l$ _! U. Z; b  w& k
   - u) [$ R4 z& n+ X9 `: X
    printf("data_read = %x\n",data_read);7 o3 u% G5 T' j, e6 {, N
   }
, d  e0 {8 j8 s   
2 s# B! u- b. I& O; X   msleep(10);5 S6 b. _" x- B
  * x" {! f* T* \( I
  /*/ [) G: ^- [# _. T# O3 r  }
   ioctl(fd,1);   , s9 d8 ?$ m! i; Z; G! r0 k
sleep(1);
* W6 m/ U' e7 d4 _* o" N ioctl(fd,0);
, R+ \$ r& Q$ Q0 V$ g6 I sleep(1);
3 k0 a5 g1 k( y4 w */
! F# t% g# [7 _. T7 `  }   
% G2 r7 _5 V. l6 S7 l: S return 0;- g, i  c: }) ]7 j, ^# G: ]
3 l; G2 E; D  V- ]$ R& q( n
}- h/ K3 ^* b6 J5 L
. p% e/ N! ]9 @) @* i
多谢各位指教,谢谢! 急  B3 a9 P: L6 W* a6 e  w/ E, P" L  r

% N. A" k5 n0 Z" U2 `, s/ y- @" k, L3 L0 K1 ^9 v
% A! ^6 W; _+ \; f/ s

: p, B: ]) z% `
, }% t* R9 o; d& A: q2 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 12:08 , Processed in 0.050215 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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