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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 g5 S7 V% z& L( o( S$ U- L3 q
main文件:, b1 C( w  \+ P% P- \# r
interrupt void interrupt4(void)  
) z2 b- Q8 `' v1 H{
* f$ u" v; h! b. U6 {8 v+ @  Uint32 sample;
2 v& U7 |' `8 l' Z  i7 ?# {9 l7 k
8 x: T2 ?. x7 `6 D  sample = input_sample(); // read L + R samples from ADC1 [- l# B: a8 j( {6 W6 ^# N
  output_sample(sample);   // write L + R samples to DAC
9 p+ H9 Z" Y6 R' ?  return;, j) o! `4 x' n4 L
}
, J2 l- V/ m3 L* T, p- Q. y6 N* X& E& g0 M+ d7 \! }0 g
int main( void )
& L( w2 T$ k5 G{
  v! |3 {+ E' X. v* q5 e7 {' X/ M) A' V* z4 n7 \9 y
    /* Initialize BSL */
0 \% k; k; f% _. o5 k' P    EVMC6747_init( );
( s  @+ @& t) A$ P" i        /* Call evmc6747_intr function */$ n# a- v1 v6 ^/ {% ^0 `/ {
    aic3106_init( );
, ~2 q# s+ o" W, n1 x: A( B        while(1);2 H7 L9 g/ T4 ^5 e
}
5 K5 u. ^! ~+ f1 I7 ^7 L& X
: F8 P" E5 W) x& X: G# F# Z8 x* g0 e2 d$ q6 E- e: Q( u4 v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, N9 j. A& M6 O1 v3 O  Z
/* Initialize MCASP1 */& Y! L+ C3 }2 \! `" a2 B' d
    mcasp = &MCASP_MODULE_1;9 w# w" Q' Z. d% O$ J
    mcasp->regs->GBLCTL  = 0;       // Reset* B' y* n* j' T/ z+ V' |
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ \/ e9 P, @3 N0 O- O    mcasp->regs->XGBLCTL = 0;       // Reset TX9 N! R' [/ m" a, S9 y! ]9 ~6 P
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 f; u* R9 l3 q$ h) u   // configure McASP0 receive registers
! `! ~8 c$ i& V7 a0 g$ u& L& `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; i( q; E+ P9 t* y+ E; u4 u
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 z/ W' @, x2 y# A7 P5 k! ~" Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word" w3 j1 O1 g* ~' @/ p% |# i4 [+ ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 b' U- C8 r7 U2 h! H4 ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 T% V" I3 b1 _0 H# w( H    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- u7 E* L3 X8 U    mcasp->regs->RINTCTL    = 0x00000000; // Not used" K) x/ \" O6 r5 t3 U5 E7 j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 ]% R: s( S  K6 z$ [

" x, J8 F& |5 g/ e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 X% ~) G+ w1 M    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; T* \% Y$ i' I8 L* M1 |% i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 a+ R0 |7 b0 u' c, V8 e
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% Z% ^4 z% Q% U7 V- A9 u; ^
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- e1 D0 h2 ~# L8 q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  |9 Y/ m* g. X5 @' D2 y$ Y7 w- j8 ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 _* ]' W6 u( v& T; f0 ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ k' K* k* b, b. O8 j3 b
! X! @- d2 {/ _2 e) t; T! U+ H4 U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! o' U: i  s0 o) o2 x9 y. j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) f- N: i+ T$ E5 |    mcasp->regs->PFUNC      = 0;          // All MCASPs" r) X. [! |3 G- i3 Z! |
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ P0 g. H% n1 a6 w
' Q& e+ }0 Z# j- o/ ~; ^' f    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 f: q9 \0 i! i* C6 _    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ Y) P3 t% z; G* t& i8 T) m    mcasp->regs->AMUTE      = 0x00000000; // Not used  M' C9 G* x& ^% q7 t- C

6 x( A3 Y3 J' {5 v5 u/* Starting sections of the McASP*/* p+ h% C' |: T: G5 ]/ C! Y7 S
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 y) t; ^+ t' B4 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / p" a" V5 }5 B5 ?# G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 y7 r0 v0 S0 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; w+ X' o( M' u* u# b9 t1 X
0 v4 s% v% ]+ O0 f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 E" ^$ X7 @3 u& s) T' \9 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 |0 v1 i$ X. r# i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ Y. y' M! p# P9 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 n+ C. D: F+ M* Q* m, p+ Y
( K0 Q  Q0 x4 o7 h/ n2 }    mcasp->regs->XSTAT = 0x0000ffff;
* u! l5 y2 c+ U0 O) Y5 l' Y    mcasp->regs->RSTAT = 0x0000ffff;
, ]; b2 O2 P% F! U' E/ d! Z9 u$ O' A4 Z' [9 N6 R4 I9 @! d
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 g3 j+ b' i( C7 \. B3 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; i) i5 S- h" l: D1 @5 M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' ?  s6 z) P5 J, z2 B" G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 ~. }5 B; A' w, m" N' R

5 ]( y. G, i; Q" k7 s    /* Write a 0, so that no underrun occurs after releasing the state machine */& h5 ^) V$ i" ^" H$ |6 n* Z
    mcasp->regs->XBUF5 = 0;
; e6 K2 n6 _, z7 D" m5 a5 B. w    mcasp->regs->RBUF0 = 0;
: g- |" Y1 z' B( o/ \  q8 Y$ Z: s3 H% m1 C, A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 L! }3 Y0 i  z+ n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 x- d; Y, d2 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% S- c8 z$ x" a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% U6 [' O6 v% ^! `( b
% x+ L' D$ f1 Y% ]' \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( D/ Z6 o1 N; m: b5 V# `9 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 Y, {, W' M' u' _4 m- T2 n
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % m# j7 J; Z# R3 w7 `' |0 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' f8 O- _! s5 k: O

7 U4 I5 t/ V" G1 Z    CSR = 0x0000;0 R3 f: h( `( l8 H8 c0 E
    INTC_INTMUX1 = 0x3d;, c! p- {( e3 ?1 `7 c
    ISTP = (unsigned int)vectors;
& x) m- ?2 `) N, p, ]; p& l5 ^3 k    ICR = 0xFFF0;  8 R, L: W- x3 L; ?  ^
    IER |= 0x12;  
. Y8 ^& ^  R8 V0 i    CSR |= 0x01;  6 z. I- v4 A1 ?7 i& ^2 I
1 m. r; s$ a( ?: t& a. m% ^7 R
4 ]5 N0 R4 n9 S% D. n+ {
0 m8 g1 W" C% h' p, S- ]8 ~
还有就是两个输入输出函数:
0 T7 n- O# }0 D9 D, Ivoid output_sample(Int32 out_data)2 |% n4 i/ R9 S+ M
{
/ R+ o# f& ^- G1 d  AIC31_data.uint = out_data;  / S/ N. a8 L6 e9 m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 b* A+ K1 D( p' f
}
/ L% U( K0 m" K2 _' r2 c5 _* |5 o# }# v
Int32 input_sample(void)
) Y7 b9 c, e* v  b{  ' I1 Z# ?2 ?! M2 c
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( [& F# j& i- Y/ m1 E4 S
  return (AIC31_data.uint);
. N0 D; }+ ]$ d}
. f! c, [3 D& [5 |7 `" ^0 ?3 X" J4 ~; ^9 m! q1 E
分享到:  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, 2026-1-11 22:03 , Processed in 0.040364 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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