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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" {  c# {4 |/ d% @  Pmain文件:! R1 Z4 n0 z- Z9 K
interrupt void interrupt4(void)  ! z, q8 _0 N1 n% q2 N, @5 W
{2 Q' z) Y/ q7 T$ K5 o% }
  Uint32 sample;
6 N  Z# ]* H; K0 z( c: q- ]5 B
4 O8 C. Y. D1 E+ I; f, ]! F" U* j  sample = input_sample(); // read L + R samples from ADC
* O/ J  t- G! V$ @3 |: G* {% @1 p8 i  output_sample(sample);   // write L + R samples to DAC ) k2 K2 M! n; ?% z
  return;) g# E, [. M+ W, }* W
}6 P9 m& Q. v6 u6 h4 u6 U

: y9 W: u) p2 }2 R9 Q3 Y; K" g: mint main( void )' ]3 Q5 U# i) k' ?: Z) a6 N. P
{
8 J4 i* l( T6 B5 W* K. }- Z( T
    /* Initialize BSL */( ?, C. T6 {$ F$ O% I
    EVMC6747_init( );' b- G# G3 C1 H% x9 r% ^& k$ a
        /* Call evmc6747_intr function */$ V& a/ g" ~. I% J
    aic3106_init( );* v# Z2 t9 ]/ N7 I: e- q
        while(1);
, D: Y* i# \- P$ o4 q+ h6 v}
% [& H" {) y. Y6 u& b9 }& e/ P/ [4 {5 B. `5 H9 d& r& o0 Z
& q8 L# J- x( a9 D$ E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 N' c, f- F' v/* Initialize MCASP1 */" r  A' I! z1 z: r
    mcasp = &MCASP_MODULE_1;
  `) Y6 j7 C4 A- g8 x( @1 j    mcasp->regs->GBLCTL  = 0;       // Reset
# B4 \7 O) G2 n0 u' F    mcasp->regs->RGBLCTL = 0;       // Reset RX
- E+ G) D( u; S. P* i5 c    mcasp->regs->XGBLCTL = 0;       // Reset TX
, F8 b  a, S. M) C7 F: X( p7 @    mcasp->regs->PWRDEMU = 1;       // Free-running
) T1 U; f: B' w/ B8 L   // configure McASP0 receive registers
4 i2 E! i8 x9 e2 `. C- B    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 [4 ]7 J. `0 i1 R! f
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 b' N- ]5 |# n+ P' r+ R" [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 h: T# p6 \7 O/ D' K- _+ O3 v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), g6 |. g; y- ?5 p, W; ]& X) H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
# L1 }! B0 _9 t5 c    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ n, g# V+ G+ {- l
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& ^7 N; D) R0 }2 y/ R( G& a; B! {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 @% p, J4 G+ u% Y- @; J

0 s) P+ a3 t( t( Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 k2 e6 T1 @9 f) @; P& j$ y' U    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 e" e/ q$ C' o* q& l/ ]1 V
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* o- J* f0 d: K& y4 D4 A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 }% _! T" o2 R6 n5 d) ~6 n4 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ D2 M. `: w2 X# b* {- s+ [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 N. X. p: k# }9 }. t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
6 F0 p8 v# \" b# G7 d4 s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, K: d6 s6 M8 k$ S' O; t% Y% k

% l2 Y: l3 S7 R# O9 `& o+ g0 A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 W7 A  D7 w, z' @$ b$ V    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) J7 w3 w" |9 T& m+ ~' P3 }$ s: A
    mcasp->regs->PFUNC      = 0;          // All MCASPs# f8 k5 O/ n9 C- t5 r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. s0 ]" }' Z/ @3 j  b) S4 K, r* J' E  U
    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ A+ e+ |; t8 S0 j5 T! A3 ]3 o    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 r" f+ ~* H' r# T. ]0 c7 {2 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% X: v0 R) y" a1 j' r) {2 A4 ~; s4 {" c7 I4 A9 E+ C
/* Starting sections of the McASP*/
8 F! E% f$ P) D6 k    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 }1 \  T) [  z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 e8 S8 `8 T1 `) u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( ~" V' e' U2 U5 b; ^2 C  K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, ~" d5 q+ z# @% p$ p- x' }' z' v/ y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: q; y8 M6 O) x# D" f2 c0 U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  G* v  N) E+ @; l
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 _* K$ y/ i) E( w( \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! k9 z- g$ X6 z6 Y
2 W, Y9 ]% ^  f! h
    mcasp->regs->XSTAT = 0x0000ffff;
9 A2 u+ d" e" P9 G    mcasp->regs->RSTAT = 0x0000ffff; ' K& w& r* x( @7 T3 C

, Q8 o3 j2 [* Z; g6 X    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; M3 X' A6 C; x! G  s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 @! l, I8 E/ y0 i    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : Z3 r' c' @% ~! t9 T' W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) F, H1 Y7 g4 L. P6 J

; Y0 ~0 }9 ~, q! I    /* Write a 0, so that no underrun occurs after releasing the state machine */
) L/ `  n' w  Y3 P    mcasp->regs->XBUF5 = 0;
% l& o) R) e& V/ m( R1 x) I    mcasp->regs->RBUF0 = 0;& q8 }( m" {/ h" A
" J$ j) s  b- M& R
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; a2 R! K2 k7 k1 s/ Q8 z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 t/ C" @3 a- v) g7 l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * l" w  ^8 ~6 O3 Q+ |6 s8 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }& i" e9 [; n6 k# B0 @
5 m# }; c2 q* \8 P! l' _& M
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / ^3 @6 }, o( d* Y+ V, ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 f1 {9 S: ^6 N" k1 a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 W# c% S+ J# w+ w/ z3 b8 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 D4 |$ z2 Q* e- m' G; e
8 F6 I3 A- b$ F0 w4 {) F! ^2 K
    CSR = 0x0000;' F) D. @8 T3 ?" o" K
    INTC_INTMUX1 = 0x3d;
9 v& D8 V$ B% }- A    ISTP = (unsigned int)vectors;6 {* p, v3 P) C' n8 [
    ICR = 0xFFF0;  
5 o/ y8 r5 G. S8 i4 r( ?. [" y    IER |= 0x12;  
* ^- m% @6 q" K: I) x    CSR |= 0x01;  . {% |! m2 I9 f% w7 ^# |

: v% G% A: e; n4 U4 H& ^
3 _2 L+ D" A& ~( a% w, j- d: r+ b; J1 ~, x& C$ k$ A# k, k+ ?
还有就是两个输入输出函数:
" [" N0 }' x4 z8 p# I: U/ gvoid output_sample(Int32 out_data)* x/ |+ w* R  a  x# U, X
{
$ P" m% O% Z) y0 Z0 c, H  AIC31_data.uint = out_data;  
% _& \6 b' C) {* Y% G6 X0 \  MCASP1_XBUF5_32BIT = AIC31_data.uint;& f0 e' [0 \: a6 f
}2 a# I5 H& k- s9 ^

, Z1 P* J, S4 u% q1 U; q" u: PInt32 input_sample(void)4 Q4 s; H. B( ^# R
{  
, ^5 R# y6 {% M6 `1 ~8 Q( _  AIC31_data.uint = MCASP1_RBUF0_32BIT;" j" V' d- t: w* i$ V0 d8 Q7 T1 H; S
  return (AIC31_data.uint);
% r9 u( |" ?/ l% _}
/ |8 {$ ]) g+ r& |( ~" H! g: V: |
分享到:  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-11-13 09:22 , Processed in 0.037820 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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