C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5714|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 U/ c# d3 W8 [9 n3 F3 }2 ?: Hmain文件:; I8 F" Q- w1 k; ^7 h
interrupt void interrupt4(void)  
) I+ z  l, W, K4 T% O1 C{6 ]# V4 y- Z# [6 k3 c
  Uint32 sample;) y% D4 k, G2 m4 p
6 R1 A7 m5 I9 C7 x3 i: F
  sample = input_sample(); // read L + R samples from ADC
" V, S7 h* `9 S  Z4 h2 A0 Q+ U  output_sample(sample);   // write L + R samples to DAC 2 v& ^) E3 m0 J4 J1 }9 a$ z
  return;
+ W5 ^2 H9 C3 Z}$ l, |$ ^* g, K8 r6 x1 s* R

3 }2 d# x$ L* G- \6 Tint main( void )5 r$ q2 V  U8 Y- T! D- R
{
) }( f- U+ Q" [3 F; C8 @% r
- z" Q7 b) b# Y! T+ n% t# E    /* Initialize BSL */
, i$ R! m4 p" V3 C* D, C    EVMC6747_init( );- }+ s: ~( F- C. y3 D
        /* Call evmc6747_intr function */* f& B: [1 K0 i0 L1 Q4 O6 U; O
    aic3106_init( );. b$ E& h; f& h# N- S
        while(1);
) k6 ]5 |( B- t, B! L}
; n1 q: d# x8 ?4 k5 f% J* r. n5 Y4 `: o! J. r" D. c
: d7 T3 k4 A4 P  z2 Z6 O* A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 g0 E; _  q, D! |$ F( i$ P/* Initialize MCASP1 *// v  U6 w  v. {% \
    mcasp = &MCASP_MODULE_1;
6 ?# k: A: k8 w: z7 u    mcasp->regs->GBLCTL  = 0;       // Reset8 [6 v* [3 j5 G* e! q# s
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 y$ U% Z3 P8 J8 r  k- i
    mcasp->regs->XGBLCTL = 0;       // Reset TX# N) ~' K/ m" s$ B7 e) c3 I
    mcasp->regs->PWRDEMU = 1;       // Free-running
) r8 w" G" |( L/ e. \: b   // configure McASP0 receive registers
& ~" f. \+ \# b  c* i! ~    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 Q  h2 A8 ~' l* L1 I% |
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 Q% a& k% y% d( }0 U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, X. z2 B2 E/ x$ d* v5 `( o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: M7 M5 O; v+ k  X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), m  M2 W6 M: q4 R. z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% k) ?6 r' r: ~& s& v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 |6 @9 |5 T* Y  L/ s  Q1 p
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( F7 v  `7 s) k% F# t% O

" d: N0 l/ ~1 E* t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used8 {; O9 A7 o* c; s3 f1 V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 K& d, W* L4 L7 M! W# l    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 h2 d& l3 }" ]2 ?# F/ n    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ Y; \# n- c% w' B7 L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 N% c6 \) g: a3 W; G
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& J: G2 T! m- M5 o* ]: q+ W5 R2 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 w  L! e% P% L+ k/ I2 n( ]7 j
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' M: t7 @$ `+ k( X4 [' @3 a" S
$ ^, r- X( d6 f( O6 U8 h- i9 W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 S" A, Y# \. a% A5 A1 {    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 B+ [% s2 j& Q0 T; g0 q    mcasp->regs->PFUNC      = 0;          // All MCASPs, Y7 q. W. U( d. g  T4 s
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  ^+ g, k( a8 L9 H4 l

1 E/ g! k3 o4 p) N! ?    mcasp->regs->DITCTL     = 0x00000000; // Not used# w2 N7 U0 _5 E1 |  S9 L9 X
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ K3 k! M  X# X" U    mcasp->regs->AMUTE      = 0x00000000; // Not used* @# a/ q$ a0 b- c! W

. E& W. m2 Q- E6 ^/* Starting sections of the McASP*/$ }$ X7 n7 p7 S6 [% `$ K. T
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 V3 J% _; p9 m' @% L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( Q2 k. [& P$ J7 z/ l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 y/ H/ g* F% @/ ]% M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ]3 ?) s1 R( `) K9 {8 |, a' h  |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 K" [% W" p2 d2 y5 N' ]) e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 y2 Q6 ~7 \& W8 N+ r+ C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: I$ Z% R8 w3 W- d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ |+ a2 t- N/ b. M
6 ?1 i3 k2 }. w+ ]$ p( e/ [$ L
    mcasp->regs->XSTAT = 0x0000ffff; ( @  \9 f( s1 @2 R3 k5 x0 p
    mcasp->regs->RSTAT = 0x0000ffff;
: W" h% H3 U0 y* N7 z& P5 ^- F! C
( i3 `/ p$ m6 x' r" b    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! e" U4 c, o8 ~! `/ p  k3 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 t$ j0 t8 ]# |+ b( A" z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 A# Y, {) w% U4 Q5 @) \- Z" C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' a( h* c) k. H5 w' i7 ?# l2 W% ]( L% ^" z9 ^. p. y1 I1 l
    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 s! w. f4 z2 u9 C6 d    mcasp->regs->XBUF5 = 0;
8 M$ B3 D/ ~7 `9 X    mcasp->regs->RBUF0 = 0;' B0 Y' E6 s4 L  |; J  z
' V9 K: g( c# n2 X: ?) @: C
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 |+ B* P' a7 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: g4 V/ A0 N& E; \/ B4 m# ^$ q: |$ w, m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 E, i7 c) z6 T* I- g# c7 k+ m! j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' N4 h* Z$ f! B1 K2 I
8 e0 t. Z3 G; H& x2 Q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   i0 j0 K4 [) {5 j9 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  B" ~6 y" }8 Z! N* H3 i* C
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : n5 U5 S0 w; }3 a  e/ N. |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 W$ o  X9 Z( [' e" m* y! K/ t* I* j1 q
    CSR = 0x0000;
' ?  t& Y' f9 I7 E( P4 H    INTC_INTMUX1 = 0x3d;
+ k1 X, \2 R& Q, o; J    ISTP = (unsigned int)vectors;
7 U9 n2 E6 L- A! D5 b7 ~7 h% }- J    ICR = 0xFFF0;  : n- b3 }+ N6 K2 I2 c8 i5 W
    IER |= 0x12;  ) r) E: e% j' z6 v5 A3 k
    CSR |= 0x01;  
" J0 R  e1 S$ ]# I6 N, M4 d# a- y0 h2 V6 \; J9 B1 I
; J- ]1 w& N2 ?( s) q) e1 I9 j
2 m% I* {: h6 O- V
还有就是两个输入输出函数:
: |8 y: F6 c0 E% Wvoid output_sample(Int32 out_data)
) R- s9 F' X3 x, n8 r' z{
! [" V! x4 @9 E. }3 W$ P! l/ v* r! Z  AIC31_data.uint = out_data;  
; q6 E5 D; F$ }3 x+ B5 L  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 i; p2 W( ~+ y( Z
}8 i2 {6 {, z# Y  i
- i  r/ F3 B( Z, |  N
Int32 input_sample(void)
; z* }# Z. y- N) n( l& x{  
  e5 P5 ]/ A9 V! b' _3 J- q" E  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ Y! Z$ R, F7 R
  return (AIC31_data.uint);
; g- L, i. T4 ~( V$ U8 `: u}
0 |4 j% `, L1 U+ Q" J6 a  T
. t- X. Z6 t1 K- H/ y$ ~( o1 m7 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 08:11 , Processed in 0.043592 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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