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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

6

主题

7

帖子

58

积分

注册会员

Rank: 2

积分
58
跳转到指定楼层
楼主
发表于 2014-10-16 10:58:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我讲创龙在DSP中使用的例子移植到ARM中,如下是我的底层驱动程序:
0 _2 k& g8 O/ b, C/*. D+ t2 X7 p* A6 n6 a
* Copyright (C) 2009 Texas Instruments Inc. E% b5 J; U# B
*
9 f) {, A( h' G" u* x * This program is free software; you can redistribute it and/or modify) w& N( U# L+ ?% D
* it under the terms of the GNU General Public License as published by
' g5 S" _; X, ~' d) E7 @8 `' l * the Free Software Foundation; either version 2 of the License, or+ l; W- K% C) X3 t2 @1 d! x
* (at your option)any later version.- ~( d0 \' b4 z
*5 V7 z: M/ O: C0 u. j1 R
* This program is distributed in the hope that it will be useful,& i; O# G- n7 K- f# Z
* but WITHOUT ANY WARRANTY; without even the implied warranty of1 ?6 P6 {. S  R- K* m
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ k" e) \6 z& C& Q' k6 J * GNU General Public License for more details.
3 A0 P+ W* P$ J" r3 v *
) d# S: y& p. `* }$ { * You should have received a copy of the GNU General Public License
  m: N$ B; S2 F, \ * along with this program; if not, write to the Free Software
1 }, M4 C2 w5 f$ S9 n * Foundati
6 C1 L8 G8 u7 @) {$ _5 i' ~4 @6 t*/% X2 X6 ^" p# W2 |! B5 b  F7 Y
#include <linux/module.h>
8 i; P( V0 T+ ~! R. q8 e#include <linux/init.h>
3 F, F1 w  b1 G+ T3 r#include <linux/errno.h>
6 e7 N6 A9 f# j2 f9 c) \#include <linux/types.h>5 l" c, U* e" l0 ], D/ [
#include <linux/interrupt.h>6 w' d" h# D9 Q+ U
#include <linux/io.h>: q# K6 J( R. p6 A7 t8 l- i& ]7 R
#include <linux/sysctl.h>
- X8 s1 R5 `* I- A( r#include <linux/mm.h>) {1 `& ]1 i6 c3 k9 @% \9 H
#include <linux/delay.h>3 f( W& s4 W6 q
#include<linux/kernel.h>. c( y# C: `! I3 V. K- D* R
#include<linux/fs.h>
3 E& Y! f# o% ]1 r) x#include<linux/ioctl.h>
  _- \- i/ Q  B#include<linux/cdev.h>
1 o' a. w( o" j2 w2 r2 V1 ^# {#include<linux/kdev_t.h>
; l7 g* G3 f! ?9 t/ ]" n5 ?#include<linux/gpio.h># }& Y: S9 j( C' L. K
#include <mach/hardware.h>
% n! g( F! C7 v5 y. ]' X#include <mach/irqs.h>
# u; C) o- D8 B" H3 [% i0 c8 X
* D; A3 O; C2 m' ]" s, t. `#include <asm/mach-types.h>
5 G( s, E: P1 G- X/ L#include <asm/mach/arch.h>
, ?, K. Q- I" H9 h* H" r- ^#include <mach/da8xx.h>
7 W+ e! d& `0 w- o#define  SYSCFG_BASE   0x01c14000
& f( T* w% a$ X& J$ X" ?. P  i#define  PINMUX1_OFFSET   0x124
9 z+ C- b# Y% n) K/ D#define  PINMUX18_OFFSET  0x168
5 H4 w+ m% h+ _  h: P$ l8 J2 e#define  PINMUX19_OFFSET  0x16c4 |+ g' T% I5 ]- K
#define  SPCR_ADDR    0x01D11008  //MCBSP1_SPCR6 C' p# o( W+ G7 y
#define  RCR_ADDR     0x01D1100C  //MCBSP1_RCR
5 H" c* u1 ~6 N3 R5 ?#define  XCR_ADDR     0x01D11010  //MCBSP1_XCR1 Y% I/ R/ |4 z0 H% w
#define  SRGR_ADDR    0x01D11014  //MCBSP1_SRGR
/ i; f6 |; W$ F$ X#define  PCR_ADDR     0x01D11024  //MCBSP1_PCR5 ]* l) p5 Y" t) r* |) u: y
                            ; i! _* I" }5 f$ K1 g
#define DXR_ADDR      0x01D11004  //MCBSP1_DXR
+ P' y* `9 D: ?1 y* X* s#define DRR_ADDR      0x01D11000  //MCBSP1_DRR! j1 K/ G. X' w. y4 J1 k) i6 b3 i& z
//PSC
8 O+ H; s) _* p: e9 s#define  PTCMD_ADDR   0x01E27120  8 c6 T3 r% ^- N3 m
#define  MDCTL15_ADDR 0x01E27A3C
, S8 O# f; o# W( b! u  e  u! R% {#define  PDCTL1_ADDR  0x01E27304
% X' h4 a, H& ]7 M+ q" s+ w! E1 x//GPIO8 direction
- B! Z4 Y( \' U2 W' c; ~#define GPIO8_DIRECT  0x01E260B05 E8 w, q% r9 h7 ~6 }! d1 w
#define GPIO8_OUT     0x01E260B4& Y5 n* l6 a: K
#define GPIO8_IN     0x01E260C0
* O/ v5 G7 T8 u/ {% o7 N
8 E2 y& U6 C! d# _) r3 D//#define MCBSP1_RINT    99              
; t- g" K- g/ u, @//#define MCBSP1_XINT    100  
' ?! R7 K& `& X. O9 p1 ustatic int MCBSP_MAJOR=239;2 u% e2 z& B. r
static int MCBSP_MINOR=0;
0 w* O' `3 [( \9 mstatic int count =1;
/ ~. _7 [1 _! ~" ^) S- k# e* N. E* {$ n1 E7 P3 l' P
#define MCBSP_NAME  "MCBSP-device"
" ]# Y7 ?$ s+ J7 u- F  W
' E7 }6 ?3 b; ?0 Xstatic struct cdev *mcbsp_cdev;
+ f6 o9 d. i; o3 B* M- u) ]static struct class *mcbsp_class;6 x% S0 F  N6 M8 U* v( e
static dev_t mcbsp_dev;* z0 e" r$ {7 a# n
unsigned int DRR_data;
. ^. l/ L# N) P9 `* Wunsigned int DXR_data;
) h9 P, ^- y7 M$ R$ astatic int mcbsp_open(struct inode *inode,struct file *file)
% `+ H' m# ~# z9 s8 y+ W+ e{
+ R2 M. u9 \0 V6 R6 f   
! A& e! J, t. C6 G$ L! L   //interrupt enable,initialized2 n( i0 ~" o5 r  c' k  b
   unsigned int temp;
9 p( D0 r" z8 e# t4 ]1 Y9 C7 m   //SLEEP_EN(GPIO8[10])---0
7 G0 ?; y4 R$ U   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));1 S# \+ E1 [, }
   temp=temp&(~0x00000400);4 q, B! q2 F& B) ?& x
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[10]
* G* S! h% Q/ U6 w  //RESETn(GPIO8[8])----0----1
% y" m$ `, Y. d$ [* N7 Q   temp = __raw_readl(IO_ADDRESS(GPIO8_OUT));
9 {  B* l1 ~3 z! M   temp=temp&(~0x00000100);2 R4 G1 w7 Y+ ~' v
   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---0/ g& h6 |$ M$ |7 s4 m* o* }
   udelay(100);- b2 ^, n" j. c. |
   temp=temp| 0x00000100;
: n$ M7 `7 C( b   __raw_writel(temp,IO_ADDRESS(GPIO8_OUT));//GPIO8[8]---1
) H) L0 F& B# v7 ]) c8 t. U   udelay(100);
4 F# ^# K; ~! h$ w3 s' Y   printk("open success!\n");+ g  ?' c5 [2 X' _$ ]( ~
   return 0;
# C: f  J( V2 o. p}5 F, z8 m8 ?. g/ h7 Z( P) S4 [

; h8 |- N' l8 {4 X' Rstatic int mcbsp_release(struct inode *inode,struct file *file)
4 U* d4 Y- K0 b: x& u{
9 P- v8 W1 ^7 |' M9 l   printk("release success!\n");
' H5 D' b$ f  I, K; `- {   return 0;
7 ?% w( r8 V  p, i, |0 a}
" `! N% _' G. c# A+ L5 x# T: T% {5 w! `* z
static ssize_t mcbsp_write(struct file *filp,const char *buf,size_t len,loff_t *off)& Y- r5 e: X  }  R9 S
{( v( r; {# F" q4 L
    copy_from_user(&DXR_data,buf,len);# v/ q2 q# ^% {4 k
    iowrite32(DXR_data,IO_ADDRESS(DXR_ADDR));      
% L7 U; i+ f3 J& [    return 0;
' A/ M' v" Z- u+ T3 U6 e$ v: h * v, r% j  r+ w% L7 p
}
: g) r0 T* k( m2 p2 s: V0 F- S; g7 N# p4 z8 `
static ssize_t mcbsp_read(struct file *filp,char *buf,size_t len,loff_t *off)
; R6 k% U) e  e) h# `{ # M" t0 u  V  ~
   DRR_data = ioread16(IO_ADDRESS(DRR_ADDR));
1 l, f) }7 \. {3 I0 }   copy_to_user(buf,&DRR_data,len); * N+ D6 y/ c( [6 n  V  Z# Z1 X# K
   return 0;3 I# D2 f! o8 S
}
0 G6 E/ o% q7 o6 N2 a8 y& n3 a) F( Z  j6 z$ j2 g0 F6 t7 v
0 r/ Q" E' A7 X3 o/ o
static struct  file_operations mcbsp_fops=7 p4 Y5 u% r- `' \, j  y8 v
{
8 M. i6 h5 f' c5 _. A! r   .owner=THIS_MODULE,; }, h* v3 U1 d& }4 {9 G5 y% i* Q
   .open=mcbsp_open,, u1 s9 l1 t7 C1 R; c2 D
   .release=mcbsp_release,
7 H1 ~. a9 }; ?. v" n7 g" s   .write=mcbsp_write,5 X/ m5 s/ m3 j
   .read=mcbsp_read,. x$ [$ \7 b: E: r: x3 y- L
};) x/ I4 \' K" w* n/ H! p0 c
static int __init MCBSP_init(void)
: X* M- {- `8 J5 M! F{
3 E8 f( E6 {2 K0 @' _   int ret;1 L/ ?! h" W& R+ S
   unsigned  int   PINMUX1_REG_old;
8 u! n/ p' x, Z3 Z' u$ e6 ~   unsigned  int   PINMUX18_REG_old;: i! U5 E6 v/ T1 J  Y
   unsigned  int   PINMUX19_REG_old;
% e& P- n. i5 W0 e! y$ t9 K   unsigned  int   temp;  
& F, [( H& W# u; I6 L* Z   if(MCBSP_MAJOR). g+ k4 c1 y# {, |+ z' W
   {
+ G  Y6 c$ R. h+ T" |0 A      mcbsp_dev=MKDEV(MCBSP_MAJOR,MCBSP_MINOR);, ~2 T, T* X- [/ }  n6 I
      ret=register_chrdev_region(mcbsp_dev,count,MCBSP_NAME);- K2 }9 h3 l5 T5 Q8 ~
   }* I6 i6 \( o3 l/ t7 @- G
   else
0 k8 k# B  j0 `2 `! w- j" j   {* b% f0 K3 V1 s# J
      ret=alloc_chrdev_region(&mcbsp_dev,MCBSP_MINOR,count,MCBSP_NAME);
& o* B* M5 g$ `* ^& Q2 v# M      MCBSP_MAJOR=MAJOR(mcbsp_dev);
1 L5 R( i) i% t+ {& x1 U% q$ t   }* o- f) K, j. o* P; Y% m
   * b' H3 U1 \/ D
   if(ret<0)
3 \7 g9 z- ^2 n6 Z   {  y. G% c+ G5 e/ o' ^
      printk(KERN_ERR "register chrdev fail!");! j" Z1 a! @3 P  k# `
      return -1;7 ~5 r: k) `  Q1 b5 a" Q
   }
! h/ F0 n8 ~# h: ~0 r( m   # {# F/ T) D0 ?- E
   mcbsp_cdev=cdev_alloc();* g: T$ c! U* u; U+ U! w
   ) j. a  V) @, |( Z& i
   if(mcbsp_cdev!=NULL)5 {6 E& j" X& K0 y. |% D
   {  a% j$ ]- P0 U$ z
      cdev_init(mcbsp_cdev,&mcbsp_fops);2 P( ]) p# M0 ~& l
      mcbsp_cdev->ops=&mcbsp_fops;
3 O* g/ M. @3 Z! [  R- `      mcbsp_cdev->owner=THIS_MODULE;) ?* j1 s4 {9 J
      - A8 ~& r6 m" s7 o
      if(cdev_add(mcbsp_cdev,mcbsp_dev,count))
2 J$ ?4 P; e/ v0 r          printk(KERN_ERR "register cdev fail!");
6 s' u& J0 f! E( `+ H      else
1 _: w& ?- n8 J4 X( s& b: h5 D          printk(KERN_ERR "register success!\n");
- o9 F3 m. p9 U   }
* J9 X% S6 |) f7 B" j2 q8 v& P! w   else9 q: p9 ^0 k+ k! x" h, d! [
   {
2 d7 |* s& I; ?      printk(KERN_ERR "register cdev err!");/ A4 D2 A* q$ |! c8 e( I5 w% n
      return -1;; ^+ {* Z9 \  K9 ^9 v5 v. f
   }
: e" V1 T! n) ]8 ^4 u& r! L   5 c7 y' z* C% P; M" ]
  mcbsp_class=class_create(THIS_MODULE,MCBSP_NAME);* ~" l. V5 z" y! x) C
   if(IS_ERR(mcbsp_class))
1 A/ X5 n8 J6 z, ]  F+ U   {
& x4 _3 \. I& ~  d+ a; i0 x, p      printk(KERN_ERR "register class err!");
7 t. q% M1 n4 ^+ N  m+ u  B   return -1;
, @2 b/ M; e" p1 }1 ^   }- [3 q& m$ K; Z. z9 w
   device_create(mcbsp_class,NULL,mcbsp_dev,NULL,MCBSP_NAME);( w# {1 D/ m0 n  k8 @

& n+ S! l7 \( P2 Q2 d   //PSC
8 v# Y8 H7 h" ~6 p3 J- @" _4 ^1 v   //add Enable MCBSP
8 _8 A8 I- \! h2 k   //test" w* j* G* Q% d9 G$ w
   temp = 0x80000003;
, h6 R) r/ m/ n0 r# H1 q+ l9 d* l   writel(temp, IO_ADDRESS(MDCTL15_ADDR));
$ l  Y; L# u/ k+ b4 E/ A) l   temp = 0x00000003;$ \" W" C$ [3 m! R0 _6 x3 ?
   writel(temp, IO_ADDRESS(PTCMD_ADDR));
0 z' r( v! g. X' R/ ~/ V1 ^
$ \# R9 t& X6 N9 H   temp = 0x001FF201;' o- Q' f( a( ?: x
   writel(temp, IO_ADDRESS(PDCTL1_ADDR));
  c4 v& [! y- R( p' A  `  {   8 B. U" m5 N& L+ m0 F$ A  t7 ?# \
   //PINMUX  
1 J5 x9 _: _3 h   //MCBSP_CLK(receive/send),MCBSP_STRB(receive/send),MCBSP_DX,MCBSP_DR,
. J) n% Z+ C/ S   PINMUX1_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);  . w/ o) J6 \8 [+ x7 D) F: v
   PINMUX1_REG_old=(PINMUX1_REG_old&0xf000000f)|0x02222220;   4 U9 ~, Q+ n* l! I. `
   writel(PINMUX1_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX1_OFFSET);
# B. A  I6 q5 \2 k! N6 a4 g2 ~   
$ ]0 [  M" `% j9 E& |( D   //SLEEP_EN,EPR,L138_SHK1,L138_RC0 J) T6 ]) F; C% ]- X
   PINMUX18_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);  % K$ ~+ w1 |7 ^7 E# {, q8 k1 [
   PINMUX18_REG_old=(PINMUX18_REG_old&0x0000ffff)|0x88880000;   
' z8 y! }. o, B. E9 G) j" k   writel(PINMUX18_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX18_OFFSET);
# @7 P9 }+ ^2 e$ }7 Z
  i- Q1 e) b9 E8 `, [5 H   //RESETn,L138_SHK2! _( }* G2 K, G& g& Z; r" ~0 p
   PINMUX19_REG_old=readl(IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);  
2 s( C4 e" a/ P( ]9 f   PINMUX19_REG_old=(PINMUX19_REG_old&0xf0ffff0f)|0x08000080;   * [/ ]' }( f" Z; d
   writel(PINMUX19_REG_old, IO_ADDRESS(SYSCFG_BASE)+PINMUX19_OFFSET);% H/ k3 X% @* {9 s9 I* P  a% s
/ X) Q. c, d) Q0 Z1 C) Z0 l3 I
( {' w, r" t' a% O
  //SPCR Register
) o1 i, X& c6 _  //FREE-1,SOFT-1,FRST-0,GRST-0,XRST-0,RRST-0,RJUST-00(Zero-fill MSBs)reset: a8 @" ]  M- @. O+ i( I; _
  temp = 0x03000000;//(DLB=0)
  S) K, j, [. ?, \$ [ // temp = 0x03008000;//(DLB=1)
* O) Q! }$ h' r  writel(temp,IO_ADDRESS(SPCR_ADDR));  //reset
% {! d. o' x& P; y) K7 \  temp = readl(IO_ADDRESS(SPCR_ADDR));
2 ^6 ^$ _; n4 g1 k: G4 @6 L1 {  printk("temp=%x\n",temp);/ U% t' X8 C) f. B" z0 c; x

& b' G. l. j4 y  f: O   //PCR Register
' \- |: E  B- p  f* ^: U% j   //FSXM-1,FSRM-1,CLKXM-1,CLKRM-1,SCLKME-0,FSXP-0,FSRP-0,CLKXP-0,CLKRP-0
$ L! s) F/ P; P5 n5 X/ }  // temp = 0x00000F0F;
+ p8 N9 O& m; g  temp = 0x00000B0F;; U, p, d0 j; o* a/ s9 g  T/ w
  writel(temp,IO_ADDRESS(PCR_ADDR));  //initialized
# n7 F  f0 Z* g  temp = readl(IO_ADDRESS(PCR_ADDR));5 o5 H6 d0 c+ k4 g
  printk("temp=%x\n",temp);  6 T/ Q5 Y/ L) r: k
   //SRGR Register
  O8 T* i- M) x3 B  O   //GSYNC-0,CLKSP-0,CLKSM-1,FPER-31,FWID-0,CLKGDV==11
8 P  A' t+ d1 ]5 U' k3 K //temp = 0x301F000B;* \6 j7 y) |/ N
   writel(0x0301F000B,IO_ADDRESS(SRGR_ADDR));  //initialized 3 r7 d6 f- H* X. ^
  temp = readl(IO_ADDRESS(SRGR_ADDR));1 N# X! k& B, O3 R& q
  printk("temp=%x\n",temp);
' K) s# u- f! q0 o; @8 \' a4 n, K, f   //RCR3 n% S0 @! ^* O4 [0 x  s
   //RPHASE-0,RFRLEN2-0,RWDLEN2-2,RCOMPAND-0,RFIG-1,
# V* U# n: F& x! Q0 {   //RDATDLY-0,RFRLEN1-0,RWDLEN1-2,RWDREVRS-0
' l& r6 O5 G( a1 c5 t4 c8 _   temp = 0x00440040;
$ C  C  S! n! e& t& ?   writel(temp,IO_ADDRESS(RCR_ADDR));  //initialized   
2 i. Q& p3 \* u: e7 I7 [   temp = readl(IO_ADDRESS(RCR_ADDR));
: z& q' Y4 o/ y2 H   printk("temp=%x\n",temp);% ~- m$ ^3 r# q3 s6 j0 L
   //XCR1 z4 u% l; ^7 h/ g" O# b
   //XPHASE-0,XFRLEN2-0,XWDLEN2-2,XCOMPAND-0,XFIG-1
" ~. K0 B/ [# L7 ?% }) p+ E# A   //XDATDLY-0,XFRLEN1-0,XWDLEN1-2,XWDREVRS-0
0 a4 H/ f7 ^& R   temp = 0x00440040;
7 y. a- R' K8 G- R   writel(temp,IO_ADDRESS(XCR_ADDR));  //initialized   
8 s) K0 f. s+ d   temp = readl(IO_ADDRESS(XCR_ADDR));
; t( t. L# U2 r1 {  I$ i   printk("temp=%x\n",temp);: K9 s' U! [% ^: n
  udelay(100);
: W3 H2 T" M/ `0 j  //SPCR Register$ ]5 Y& j: ^4 R/ W7 X$ ]* k# p. c
  //FREE-1,SOFT-1,FRST-1,GRST-1,XRST-1,RRST-15 @7 w2 a2 P' V6 e( s
  temp = 0x03C10001;   //DLB = 0 VS DLB = 1
* z% v6 A  J6 G% K) @  writel(temp,IO_ADDRESS(SPCR_ADDR));  //enabled% k, }' s9 l, M8 n# J
  temp = readl(IO_ADDRESS(SPCR_ADDR));& f! T( q; f+ L# T
  printk("temp=%x\n",temp);6 P# B! I  U# m: i, x# J2 @
  udelay(100);6 e' C0 W8 m# c& T* j% X9 p- S

% U1 @/ H/ C! \$ L6 ^, }" n$ \  //set GPIO direction
! N* R4 c) I8 x: ?& W/ b' g   temp = __raw_readl(IO_ADDRESS(GPIO8_DIRECT));$ B: T9 ^% r0 G( @% h' ]' u
   temp = temp | 0x00000100;//EPR----input
" U0 |8 U2 O( j   temp = temp&(~0x00000500);//RESETn,SLEEP_EN---output" Q, t8 z: N/ Z5 F( B( D3 Z: O& j. p" W
   __raw_writel(temp,IO_ADDRESS(GPIO8_DIRECT));
5 Z& _% U3 p1 {: l
# z$ A9 {: u2 j   return 0;2 ~/ f( E/ q! |. W( k2 Z1 P! i
}
' h* U+ X  ?  J/ pstatic void __exit MCBSP_exit(void). D. [* u' v. F- c2 R
{/ j+ g" i/ D6 S& P. z
   printk("mcbsp chrdev exit!\n");
3 p3 P7 M' Q0 M: T0 I   cdev_del(mcbsp_cdev);7 Z# c" @# G3 ^) P
   unregister_chrdev_region(mcbsp_dev,count);
' F; ?: w  H2 I. i   device_destroy(mcbsp_class,mcbsp_dev);4 _1 L* n7 w4 y- k# V/ \
   class_destroy(mcbsp_class);
! \1 f/ e: r6 B9 L}8 ]+ w4 e- T7 n8 i# @
module_init(MCBSP_init);
$ g: g1 ]  i  \" H% smodule_exit(MCBSP_exit);
/ U' G2 p- N2 k6 Y# C% V  a% M; L4 H; M
MODULE_LICENSE("GPL");
' g3 m8 j! I3 P+ V! A5 [5 w. Q. g$ d7 f) M) {# x* R; O1 S
我讲上面的程序insmod之后我用示波器量 McBSP的发送时钟脚,发送数据脚(我还没有发送数据)以及发送同步脚,3个脚的信号是一样的,不管是用我自己的底板测试还是用创龙OMAPL38 的开发板测试,都是一样的,类似于噪声的信号时钟频率也不对。3 p* w+ m2 ^( M3 r. u2 P: I
我的应用层的测试程序如下, g( z; m3 [3 g* E; E
#include <stdio.h>
1 k0 i- D' _4 Z0 e#include <string.h>) E7 @5 d& X; H: C* M1 ~5 D
#include <fcntl.h>
8 Z! M+ K& Z# V#include <unistd.h>3 h) G, U) p0 [' H) h! w) G
#include <signal.h>: c/ p8 y  @) I
#include <pthread.h>       //线程
( V+ G7 `- a1 m#include <stdlib.h>
7 }; X" |* m: H" d( C: F+ R% h#include <pcap.h>          //捕获网口数据
, L" D) P5 E: I6 E7 M#include <semaphore.h>     //信号
  r/ A% U$ ~+ R- q#include <sys/types.h>     //消息对列
! D6 F6 d1 t$ T. C5 ], h* y#include <sys/ipc.h>       //消息队列
% e. E! H& B+ T8 o6 K#include <sys/msg.h>       //消息队列
5 L' z  n. z9 w* Y3 f#include <sys/select.h>
/ L- _4 {; r, R4 h#include <sys/syscall.h>! s& W: p2 A/ v& ]: o: F$ ]
#include <sys/stat.h>
" x& @4 t) K: R: h. u- q( z3 j#include <sys/mman.h>
( Y; f: h7 d  m! N' _% A#define msleep(x) usleep(1000*x)& x  J+ m) U9 N1 \
( G; }4 ?5 W. l
int main()( v4 w# |9 x" q7 Q8 S
{ . z6 i/ A$ h. `, i! N" ]
    //MCBSP,ARM与AMBE2000交互设备
/ f$ `$ U5 e3 Y int fd;: R- g, M! `- U
unsigned short data_write = 0x5555;
: r3 K+ t4 D9 V2 A: k1 | unsigned short data_read = 0x00;% ~7 ^; T" z5 S+ B
  fd = open("/dev/MCBSP-device", O_RDWR | O_NONBLOCK | O_SYNC);
: c. K/ n2 d3 r' f //  fd = open("/dev/led-device", O_RDWR | O_NONBLOCK | O_SYNC);9 Q- c) t; L/ u. `
   
7 N7 w. S, C. l. c' r5 [  if(fd < 0)* l0 u! m. ]. w6 i! j
  {
2 g2 G* y: D5 S  a     perror("open failed\n");
# u) H9 z* Z+ ?" Z* Q     return -1;3 e+ ?  _. v! D
  }* U; S, h3 T! \
  
& c! o# x( d: s, W! @$ T8 r  while(1)
5 @0 g, p+ `0 f" w0 ^* \  {
1 m1 ^/ Y, [6 i) i   
" w! ^6 `: g6 {/ d$ T( O2 W, o. I   //AMBE2000每次读写是24个字为一帧9 V  W7 b. ]. L6 ]6 ~
   //写数据时将数据在底层存储起来,等到中断的时候再发送3 ]% e: k* K( G6 u
   //AMBE2000输入数据是以0x13EC开头的
4 _# W5 N5 H3 p  a! Z7 \   write(fd,&data_write,sizeof(unsigned short));
- [/ b( _3 S  `& q) y4 r   ! k3 p. S$ _) m
   //读数据的时候,在底层中断中将接收到的数据存储起来,然后再传送到应用层  
( ~) S' f2 C, D' }* k7 c6 A9 r   read(fd,&data_read,sizeof(unsigned short));
. |- }  ~6 K8 h6 ?   
* t$ a8 L3 c9 O   if(data_read == 0x13Ec)
4 Q3 J8 H) [$ P: ]   {
1 F( d1 g6 ^& B   8 s# J& a; w$ l! z: z7 x
    printf("data_read = %x\n",data_read);8 I! f" X) c9 W9 n: V
   }' ~% X) A# O& Q! y
   
& D9 t9 G: Q, g: V  Z9 h: q8 V, R   msleep(10);
$ C, ^, j3 u, r$ A4 f5 l) n  6 \* r5 p- W4 D. @. ~* Z
  /*. Y' w+ @& Q* z5 F  u$ n
   ioctl(fd,1);     b; ~% I4 w- X6 ]' L5 ^% Z/ u
sleep(1);
' X! M$ m! A" I1 g4 s ioctl(fd,0);
4 ]* X  N4 d; ^' P! y sleep(1);6 ~/ n. g( Z" ~# \7 \
*/ . I$ Q" Q! n7 j% ?' S' u0 ^
  }   2 R( @: {. B$ P6 C2 w
return 0;) o7 {! b$ z9 d

# \; ?) O* a: I. l# g  I9 N$ G}
% F& m* T- Z. S
- o( P( G8 |5 R# F8 V多谢各位指教,谢谢! 急
9 L2 y" d  w" k" R9 y0 ~* ^) l. u; ~- W1 b/ e( H: W

' k( _+ P5 ^3 E+ \) e2 w( \7 B6 V

. n+ b  e+ @+ `% C# b0 z3 K4 R. g$ |" ^* G# B0 I, K( G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 07:45 , Processed in 0.048905 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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