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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
7 i2 Y8 G4 H3 z/*& H! x2 h: j0 ~5 v: S
* Copyright (C) 2009 Texas Instruments Inc* I% I! z' k$ K! }/ h; m
*
" Q; ?! ]6 E& x% s1 K" l * This program is free software; you can redistribute it and/or modify/ s  M! B# w% e! Q! }
* it under the terms of the GNU General Public License as published by
$ M% A7 F) b- I$ D! c* z * the Free Software Foundation; either version 2 of the License, or
% m3 e8 K, c/ M0 L * (at your option)any later version.' I: B; f, q  H& ]
*
$ Z  Z& m9 P0 L, k * This program is distributed in the hope that it will be useful,9 r; X9 n/ z* w! H3 J9 F
* but WITHOUT ANY WARRANTY; without even the implied warranty of
: s' {) _) U* V2 g * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  i8 @/ m' O' f& C% Z * GNU General Public License for more details.1 [6 U6 i, r% {+ M+ {
*
/ x* J) V* M% G/ |9 J) z* B) H * You should have received a copy of the GNU General Public License+ e' H* X1 c( h7 O$ G7 H
* along with this program; if not, write to the Free Software9 n' z7 M5 Q' ~3 d+ r8 B
* Foundati
; t2 @3 f0 {: a' @; O4 s  q*/
: ^' X  {6 T5 C" B. `8 D#include <linux/module.h>9 B  [. |3 M* ^% i4 I
#include <linux/init.h>4 ?0 P! x+ _5 g- A( `- V$ {
#include <linux/errno.h>, A$ t# x0 t4 }/ U- Q
#include <linux/types.h>! i, _" h' r# y: [2 g) g  W* H
#include <linux/interrupt.h>
* x$ u% K3 J2 b4 n' k4 A* ^' M* N#include <linux/io.h>% W7 s4 ]$ M2 Q$ N7 @
#include <linux/sysctl.h>
7 v; N$ v0 i+ O  @6 m; H4 `#include <linux/mm.h>
; p: |0 R! E: C7 C5 ?#include <linux/delay.h>
# L$ A, j# i! O  _& T; ~0 O#include<linux/kernel.h>
- O9 l8 t+ P9 o) }#include<linux/fs.h>
0 R" [1 {5 n4 Z: o  ^#include<linux/ioctl.h>
0 b9 w6 |, G! D4 b3 u  ]6 o6 [2 m6 M  d#include<linux/cdev.h>0 q( `3 X* y/ U+ R
#include<linux/kdev_t.h>$ Y0 S" y% s) H1 F
#include<linux/gpio.h>0 b' o, F- `4 i; r& ~! I- D% {, `; N
#include <mach/hardware.h>
: ~* m9 |0 S) G. d$ y0 s% {#include <mach/irqs.h>9 V+ o1 h9 L3 K( M, D4 C6 T/ R
$ ?* P* r* b. [( f2 e$ B* P
#include <asm/mach-types.h>
3 S6 H4 v0 g) s/ T$ x" [; w#include <asm/mach/arch.h>' k0 `* B# r  z* B
#include <mach/da8xx.h>
' H& E$ p. k$ K2 c: i+ J$ T' I#define  SYSCFG_BASE   0x01c140008 |8 P. r' Z1 B" W( w+ I6 a1 i
#define  PINMUX1_OFFSET   0x124 $ P! p/ g/ A! |; I# f5 P
#define  PINMUX18_OFFSET  0x168
/ ]1 i) B3 F+ @#define  PINMUX19_OFFSET  0x16c
# w; u4 g; F* b& S# r+ \#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR% C4 i+ ?3 }2 |5 c) x7 ]) w1 E
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR$ \/ |% b2 k' n0 o; S2 \. o
#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR
* V6 U% m% {7 W5 ^: P2 J, A#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR$ y7 b* W" w* e, G) h" m) [8 `
#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR
. d, D# _& j% \                           
, C4 N0 d* O" [, x, E#define DXR_ADDR      0x01D11004  //MCBSP1_DXR0 i; o' j* D7 k
#define DRR_ADDR      0x01D11000  //MCBSP1_DRR
+ G2 T1 Z+ C( Y//PSC% p* U1 d  b2 g1 S  x* E
#define  PTCMD_ADDR   0x01E27120  
& [9 x3 i1 m' W4 o7 J#define  MDCTL15_ADDR 0x01E27A3C; J# s2 W. N% C! Q1 }
#define  PDCTL1_ADDR  0x01E27304
2 Y  x. B% ], T4 {) i5 i" P: h//GPIO8 direction
2 B1 M* t# U, u. w#define GPIO8_DIRECT  0x01E260B0
- h# ~, m. [  ]" B6 t* F& V#define GPIO8_OUT     0x01E260B4/ L4 g& G7 v5 O4 i/ T* O
#define GPIO8_IN     0x01E260C0" q& m- }2 ^  @

+ C0 ~' Q! L, C6 |# q6 k//#define MCBSP1_RINT    99              4 A3 \4 j' c# [
//#define MCBSP1_XINT    100  
: `# z7 v% ^* A$ N; V. L% Wstatic int MCBSP_MAJOR=239;
1 @" d! p) P* a& S# Gstatic int MCBSP_MINOR=0;
6 k$ F, r1 ^- I4 ^static int count =1;
4 V) F/ W; k# I
6 m& X$ C: t1 R#define MCBSP_NAME  "MCBSP-device"
! i4 X% x" i9 i6 \: y7 ~
1 }2 S/ H1 C- h) K. T! A- i- V6 K, Vstatic struct cdev *mcbsp_cdev;' G( ?6 `2 ?  n: o% k/ L. h6 c
static struct class *mcbsp_class;7 o2 ~1 f( t( C: Z+ d
static dev_t mcbsp_dev;
/ n' }* C, N* D& G8 X3 Runsigned int DRR_data;! W; c# [1 B. S$ Z7 d; [& r
unsigned int DXR_data;
5 X8 L8 E! B6 s6 n3 _) hstatic int mcbsp_open(struct inode *inode,struct file *file)' B0 ]/ a: R8 Q, ~+ [8 h. M
{
- G5 c: M# ^5 G# K3 n- C; [" H( o   
$ ~- C# G1 f0 B  Z& ~1 W   //interrupt enable,initialized
* C* k6 P5 p% M" J- a* ]1 m   unsigned int temp;
4 ?  d* _2 a4 W  G6 s: v7 R   //SLEEP_EN(GPIO8[10])---0" y# ]8 g# O( [5 M9 Y2 _$ ^, h# U
   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));: O# o; ]/ L- J2 U) B& f
   temp=temp&(~0x00000400);# v' H6 i5 A4 g# K; I
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
# N- i3 c  Y7 r  //RESETn(GPIO8[8])----0----1
1 M$ H4 F5 y4 q2 U4 N& h   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));; p# S1 a9 J3 F! C: d# Q# S
   temp=temp&(~0x00000100);
5 R' A- Z& y: E4 x   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---05 Q- S5 c! D$ O+ u4 g3 M. [
   udelay(100);7 N& D' e. ~4 A' a
   temp=temp| 0x00000100;
+ L; r# w1 Z8 y8 G' l1 _4 ?2 @   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1+ {$ e6 {' Q' h, D/ w8 M
   udelay(100);$ |; y/ S# Z; {( a3 P  i
   printk("open success!\n");6 Y6 a- }7 j' ~& l. H
   return 0;
) O# t. p1 \) a5 Q+ D5 v}
4 U3 \+ @# R5 W/ T1 @0 r! T
) j1 \2 l" k  G# F. |" Mstatic int mcbsp_release(struct inode *inode,struct file *file)
. ~# c- K8 f) t4 q, s$ q; i{0 f; E% a( c8 E1 z8 W
   printk("release success!\n");; l2 ]3 `' y7 c  D; g
   return 0;
: x+ q  H9 F7 H9 M2 O, H}* k5 ^" K5 n5 V
) o3 k. D5 `4 [( b
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)$ z2 A8 A! e7 G
{' _7 g3 f5 E7 k
    copy_from_user(&DXR_data,buf,len);1 [6 q! D5 w; X" j3 r( U
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));       : w4 E- B5 F8 a
    return 0;5 t. `+ w) D( c% P
( B* ^8 v2 X4 L% d( q
}
4 N8 E/ X+ p% g5 z. o6 g. M) H' ?9 S( c) z3 o1 g( E1 _2 J  A* A
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
8 s7 b) L0 f9 Z* W{
4 s3 q6 u2 q+ Q   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));" C" s: g0 {# g% J+ X  c8 y
   copy_to_user(buf,&DRR_data,len); ; T3 K* r$ g4 M2 \# N0 b0 H
   return 0;# _" L0 Q: ]% c
}/ G* Y8 x8 S# I3 f" u. ^* d% N

3 {% F# S( _8 p1 m2 u: U
- i2 L; G; E# X* O. @2 V! ]static struct  file_operations mcbsp_fops=
7 W4 S* V4 P1 Z& O$ P3 z- W6 w' Y{/ f) A( N$ O. j( g/ K
   .owner=THIS_MODULE,
% y7 X7 i( d# S2 P8 J" Q   .open=mcbsp_open,
0 X4 x  b2 z# d( W. `& c$ K8 ]   .release=mcbsp_release,
2 `: V. `- q; O0 T0 ]   .write=mcbsp_write,
( N# k9 ]& O! V5 Z9 a   .read=mcbsp_read,
$ s1 V' x) E- @; D$ c};3 Z3 z" \* b* f4 w# G
static int __init MCBSP_init(void)' H4 w5 ^; \$ K
{! T1 |. Q2 P1 U  L
   int ret;/ F1 J# k+ P* o* I
   unsigned  int   PINMUX1_REG_old;
' ]  I& |0 l# ?, |5 W( \   unsigned  int   PINMUX18_REG_old;
: q9 i+ K# g9 S7 t+ S/ r   unsigned  int   PINMUX19_REG_old;) J2 {, G% c/ j1 {
   unsigned  int   temp;  % d" |) `0 A1 E7 E' u
   if(MCBSP_MAJOR)# w$ b& f4 A9 @: F
   {
; \% p* g+ n5 {      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);
# s% f* _6 F& g  O- S4 g' C      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);
" c' i2 i5 d& z# k8 C- `   }& p$ z; g. `$ `1 S3 s/ T7 x. r" C
   else
) \; q" M/ b* q  I: h   {1 Y* ?6 @* X7 L5 Y" P; N3 p
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);# y1 A3 v+ _* K& x9 z, F/ r
      MCBSP_MAJOR=MAJOR(mcbsp_dev);! m$ D$ Y, t# f/ w
   }
5 y3 Q6 [/ L( b6 {; @   
! ]1 `; n2 x+ n8 [' R. f   if(ret<0)3 [, e5 j" ~" s, i
   {: f0 f0 n* q- R' F' [+ }( P
      printk(KERN_ERR "register chrdev fail!");8 B1 @' L8 l8 W- ?" m. ~
      return -1;
2 a2 `9 U% Y3 T   }
$ b' c  s3 `% v: o" X# E   % q3 i' E: O$ x8 ^# l
   mcbsp_cdev=cdev_alloc();3 z+ @( Q$ c& Y# A
   
% o' G. p5 c$ Y% A   if(mcbsp_cdev!=NULL)* k9 D  Z, H) {, l
   {9 e3 K$ P- [6 E0 @" V' F' O
      cdev_init(mcbsp_cdev,&mcbsp_fops);: @" V. p4 e5 }2 H9 @& Q
      mcbsp_cdev->ops=&mcbsp_fops;$ M% z3 [5 g7 D) }
      mcbsp_cdev->owner=THIS_MODULE;$ {4 a0 @7 i! r  g3 U
      
* b# L; u3 {/ u  k" n" Z      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
* k* n5 |8 t+ J          printk(KERN_ERR "register cdev fail!");; O/ n. o1 ?) q$ z
      else
  D2 n2 ?! v% G: E$ _  x' [          printk(KERN_ERR "register success!\n");  w; z/ e, y. f3 X
   }
1 J$ x' S7 p9 l1 h  I   else6 L  n  D3 r( T7 P4 j
   {8 _! \/ [, ~, _; |: b1 _) M
      printk(KERN_ERR "register cdev err!");
5 H2 n; V3 k* z! q      return -1;6 y# i2 `( x- X6 e% T1 s+ l
   }
: Q. E0 x& ~( t7 P* ^8 s% v   8 P- W6 f. m$ i
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);
7 z: t6 q$ Z9 R' D- B( Y3 x2 n   if(IS_ERR(mcbsp_class))
  m0 V: e; n1 H$ _   {9 v/ I3 V4 t; Z
      printk(KERN_ERR "register class err!");
4 ^# z; P% j1 P" a+ v. Y' b   return -1;
  ]/ V9 Z( D- z9 ^   }
$ a9 g6 ], m& q! p( L, x3 c   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);
6 d- C! e. Z* f: [# P* o9 T/ v/ S9 H% |% ], y9 V3 ]" c
   //PSC
5 K- M* x- y9 `  k1 X8 Z2 J+ \   //add Enable MCBSP5 y' J5 `6 x0 n1 i& C% [$ V
   //test9 u% E6 V# P' z6 ?6 @
   temp = 0x80000003;9 _- H' {9 e) P" P
   writel(temp, IO_ADDRESS(MDCTL15_ADDR));4 v* H7 U8 [' C# P/ U
   temp = 0x00000003;: b* j7 {* r2 f; q2 f: S  P% P  F
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
% @/ ]4 `' `. o& {8 I$ x$ |
  W4 ]& E: e! u" k5 L& w1 w   temp = 0x001FF201;
# j; \6 _- h" I8 x- z   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
$ U3 h; S$ I/ n, x) d; ]) |   " {+ e! P4 f$ T$ ^9 S
   //PINMUX  
4 l' r8 Q+ J9 `& U9 E2 V' U/ @5 a   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,$ ]+ G5 }( N0 h
   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  2 u! B  P0 N" ?# T& n6 ^3 r2 e  i( `
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   1 M( X$ B& A% |" U
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);8 M8 j& A6 r/ y$ }/ `* q- Z' ^8 Z
     O, G8 N# R( g! r. G8 O; l. T* L# W7 F
   //SLEEP_EN,EPR,L138_SHK1,L138_RC0 M0 |/ k' x. |! @
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  
5 s3 x+ _  q- ^  [5 V: T* `! c, q   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   & k* ?2 \- w8 s0 Y1 Q' m$ l: ^
   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
+ [* o% `2 @1 \8 O3 Q 2 P) e2 X) c+ A+ f
   //RESETn,L138_SHK2
, E( U9 ~, q. v, P% k$ d   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
3 [2 b! Z( g; x8 k! ?5 @2 o+ d   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   ) |+ e5 a9 J8 [
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  Z* _; O+ E/ w1 k" `: v1 Z# R
& \* C7 O  O7 W; w

! Z# {+ x' T! G& T- a  //SPCR Register
2 Z7 C! p4 b1 E/ Y' K$ \  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset2 m/ C3 U( N+ @
  temp = 0x03000000;//(DLB=0)8 L6 ?, M- G, p/ o" `. C  X( F
// temp = 0x03008000;//(DLB=1)
% |3 t  M* p! m- w/ n  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset1 o: t) b4 W: H
  temp = readl(IO_ADDRESS(SPCR_ADDR));" i( s  {; t8 L$ o
  printk("temp=%x\n",temp);* v6 a  c( B, c# O% T

( y* t6 {& X, G2 M8 {   //PCR Register  R3 W- M9 t0 G" Z! G  S
   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
2 S/ z4 |, ~: u4 {, I; ^, E  // temp = 0x00000F0F;
, `0 Z: Z5 Z( E- @  temp = 0x00000B0F;
; P7 Y7 U" }7 ?, `3 g  a  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
# y2 b5 x9 V- ^  temp = readl(IO_ADDRESS(PCR_ADDR));" W: ?- N2 l) f
  printk("temp=%x\n",temp);  ' e* ^5 d7 r% T0 s& v/ O
   //SRGR Register3 {' z* ?- L5 t  o
   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11. |' }! l( ?( i
//temp = 0x301F000B;$ H+ N. ^% O1 h. U( r( U
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 2 S  j+ K- p! N
  temp = readl(IO_ADDRESS(SRGR_ADDR));
8 s* D1 G1 [% x4 h  printk("temp=%x\n",temp);
# `9 }. E; X. M$ ^3 @   //RCR* K: x3 i! R! s) q
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
" `3 }- L" j, I2 M* v   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0: V% R! e& S2 ]$ l4 F; s
   temp = 0x00440040;: s. V/ _; Z* u1 F+ R  {; A
   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   ! c- ]9 s2 z0 ^/ N' C
   temp = readl(IO_ADDRESS(RCR_ADDR));
0 D+ Y/ X7 ~  T5 G3 q& p; R- K   printk("temp=%x\n",temp);
# q$ h% P3 G0 `5 U   //XCR  ^7 P2 F" h+ G' {% b$ d/ K
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1/ r6 }% y; R% B& n; _
   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0" C6 E% i" [0 ~  d
   temp = 0x00440040;
+ T1 E/ w4 `% c0 |   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
3 ]  [: Y* b- i2 b9 c4 S# V, c& D1 W   temp = readl(IO_ADDRESS(XCR_ADDR));
: B0 X' V4 s$ ]( r; Q, N; x   printk("temp=%x\n",temp);2 L/ z; B3 O3 {/ S# z0 c0 c  \; f
  udelay(100);( e: [* n: j! W/ T9 T& a$ f
  //SPCR Register! V- y! q( h! N# |
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-1
) ^3 C* B6 s+ Z( y! h) M+ Y$ f  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
! x& P" r! y( l  r0 v- @) `  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled5 ~( j: B" ~) ^( l5 D$ ?
  temp = readl(IO_ADDRESS(SPCR_ADDR));
3 G3 C& U6 d0 z( E' x  printk("temp=%x\n",temp);) ^# j* c7 I0 |% V4 i
  udelay(100);2 b+ D% Q# u/ X1 [! q! q

, p  S7 m' K% t  v0 g9 Z  //set GPIO direction
" N" F3 [6 l  ]   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));8 R6 }- |- V1 p. X2 |. D, t
   temp = temp | 0x00000100;//EPR----input
5 p& _7 y2 x- n4 I( b" S   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output
5 f  n9 N# O3 U% L- ~; ^# u3 E   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT)); # G. c' q; I4 f8 t! p7 M1 }
2 t- e1 t# x6 p- @# v1 Z: P9 [
   return 0;; t0 \" D! j0 n  x% U* ]4 u
}6 {8 Q, E1 P% _/ E  B: A0 ?
static void __exit MCBSP_exit(void). N7 [2 C- Y- J5 Y$ x
{2 Z0 }4 m4 A7 h' J0 b: Q; k
   printk("mcbsp chrdev exit!\n");
3 M0 J$ @. o" k6 \$ x+ F   cdev_del(mcbsp_cdev);( W( v# S9 {' I! X( a& t
   unregister_chrdev_region(mcbsp_dev,count);
7 i' U" M# ^4 T# `   device_destroy(mcbsp_class,mcbsp_dev);: z  L& ?5 v' G, f
   class_destroy(mcbsp_class);
" P0 }) ]9 u& E/ ~2 V2 i1 o}
+ h1 S: I4 a9 J# M/ |* Xmodule_init(MCBSP_init);
' W! _% Q# c' y" R" C8 dmodule_exit(MCBSP_exit);  h+ z9 \5 B6 B) l. w  M

! o0 R, `2 z, [! t) ^9 FMODULE_LICENSE("GPL");! ]: z+ {4 G2 M: R/ k# e
+ {* H1 |/ r# [
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。$ D. _$ z/ m0 Y2 R) E
我的应用层的测试程序如下$ K" M/ ~3 S5 s$ q
#include <stdio.h>4 d  a8 B& a* r- U9 D$ m# H
#include <string.h>
3 {! f/ ?0 {* h7 f( o#include <fcntl.h>
4 }% D1 r! S! q) _% T9 n#include <unistd.h>
' ~$ d4 u! k' W) U: r) N- v/ X+ t#include <signal.h>
+ N! k1 o4 a, x/ V#include <pthread.h>       //线程
5 P# _4 P; |# `( d+ m0 b3 X#include <stdlib.h>
! G+ Q4 C' f) x! k; S#include <pcap.h>          //捕获网口数据
% ]) z3 `+ [3 t* Y0 ^5 `" C" j+ ], Z#include <semaphore.h>     //信号
; A- b% i# ^4 V+ }" ^  ~% L  m#include <sys/types.h>     //消息对列& }3 t6 |, W( E/ K2 ?; L
#include <sys/ipc.h>       //消息队列
5 p/ ~6 P; \& \3 \: D9 d& C3 H5 M1 ?#include <sys/msg.h>       //消息队列4 h' H2 G# p. K9 M
#include <sys/select.h>; a) U+ p  e( C6 ?$ J% W& s3 Y
#include <sys/syscall.h>
4 T1 e5 i  j% L7 a; a5 H+ F#include <sys/stat.h>7 r3 N) x- X; \. x
#include <sys/mman.h>$ j& M3 i8 S1 m
#define msleep(x) usleep(1000*x)
2 Z2 O$ p) v' j/ J( J% o. P9 y6 G5 S# S, I% m) G
int main()7 r2 r2 r! M* O% h
{ ) t8 J) ?8 S+ x; D
    //MCBSP,ARM与AMBE2000交互设备
3 E% e) ^$ ~  s( U) \ int fd;$ |. W: i* R6 T& K# `
unsigned short data_write = 0x5555;
1 k8 n# F# R+ ~/ u2 M3 |9 P) Z unsigned short data_read = 0x00;; b4 F" D6 ~2 s8 [- \: U
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
& n4 F% C) C6 P+ m' p3 E5 C //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);  Z& E. Z; m3 K% F2 |9 ]) ]+ u
   
" q: `5 {* n: |3 `: d" L1 w  if(fd < 0)
  k! Y% Z( X; U6 c# H; U  {! b0 R$ k; _, n8 Y+ n+ e. h
     perror("open failed\n");
$ u' B1 Y" G; \) S4 ~: c     return -1;7 m/ N$ t6 b) V, H3 F. q3 z
  }" x0 s% B) d% W
  9 U1 \# [( d9 f" o
  while(1)
/ _7 U( j! z, `3 }  {& H8 D# ?3 D8 M* D5 v! \2 P* X! D
   + ?2 D! P2 w2 t' Y& z
   //AMBE2000每次读写是24个字为一帧
/ L1 v( ]& p. P! W* V3 y/ ]   //写数据时将数据在底层存储起来,等到中断的时候再发送/ `. I" B0 `4 K& H8 M* u8 _
   //AMBE2000输入数据是以0x13EC开头的  F7 H% _0 |; t
   write(fd,&data_write,sizeof(unsigned short));; f) E( H7 C' k/ q& l: m
   
5 R% s$ v2 y4 T. _  \* A- u5 |   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  : e% {. u0 c& }. ~5 o
   read(fd,&data_read,sizeof(unsigned short));  g  F* D. X# d9 n: G3 k6 \  i1 Q
   
1 ^' K- d* K" M) w. j, z9 W6 ]   if(data_read == 0x13Ec)" f/ t2 d- Y+ q& x% P
   {# r* c$ E. T5 d( N& O
   ) J1 _& N9 y8 S& X  V! P
    printf("data_read = %x\n",data_read);
" b2 H' K- [: e1 k6 u( {   }
( m/ q  ?9 j% B( ^   
) i6 _0 h- k1 V7 E& B, j; B8 l7 `   msleep(10);
, r1 [1 O! k# @; O. k  
3 e) m" {+ H6 P/ S1 J! S  E  /*8 y# y2 N, V0 ~6 T+ ?
   ioctl(fd,1);   , }" n4 y2 ?1 P5 G* V" o+ \+ d
sleep(1);$ o  W+ k* \9 X4 N, T* @
ioctl(fd,0);
7 F5 Z  U* A9 a' e! g- m" w sleep(1);, b* Y; ~9 U- f! ?
*/
0 i0 S2 \7 P! P; [8 l3 G* U  }   % r- u; q7 n' ^$ q
return 0;
8 N: G+ Q, {9 k3 b" ?4 c ( r1 a2 w$ z  r; L
}: X& {' v2 C$ E3 T+ i
' W4 A& A+ o, R& |& Q' t7 L
多谢各位指教,谢谢! 急6 Z/ g! ]: E: @) D0 e+ y% I

4 m0 h) m. F7 ~5 `* d1 A2 `; F# a' p/ N6 t3 c6 y6 v3 m. R! h
6 j2 W4 f# h. K  l  M! a/ r

  T* ]6 e( ?% a, |' U; ~4 o6 A5 x/ L' i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 10:25 , Processed in 0.046323 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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