C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ V5 W9 n* o! Y$ A
main文件:; r6 o* j; e7 x$ X: H
interrupt void interrupt4(void)  3 W1 {# S5 w, d" ~0 a) h. M- k
{
: f0 w( L1 M0 h6 H  {  Uint32 sample;0 o0 Q, v1 Q4 o/ B' h
  i% U! f, U" p$ m2 J
  sample = input_sample(); // read L + R samples from ADC
: h# D+ S8 S" z- E* _) t2 w# Y  output_sample(sample);   // write L + R samples to DAC # ^. P7 `, _' ^3 a+ q, G9 Q1 n/ [5 k9 l
  return;
, }8 {5 L0 ?$ _9 O1 l( ]6 h7 C}' [4 }! b) C+ x* X( `, b4 _

4 ?  x+ t$ I& N7 F# t+ @int main( void )) u3 Z$ ~4 T4 N# m/ V
{
1 ~3 W1 x" _* t6 A9 ]. `$ @/ H$ i0 V; |" s/ |6 I
    /* Initialize BSL */2 q: U. d$ [( n/ v" P8 m
    EVMC6747_init( );
! o- j) V- P; W2 ?' O1 M3 U        /* Call evmc6747_intr function */+ f: _! s# c  O5 ]/ s
    aic3106_init( );  N- a& w% S) M: Z
        while(1);
$ b4 R  r4 o1 t# M}
5 L: }+ B0 B& C' A) {4 l  D! {
3 V4 }# n. `. ?* e5 T- a6 B8 ?9 X$ P
" g4 h& O7 E8 y& Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 w& [9 D& j/ j7 z
/* Initialize MCASP1 */
3 p8 \5 |0 ~1 _& _! o8 O1 ]+ G$ t    mcasp = &MCASP_MODULE_1;/ x# O- J3 L, w2 o7 O( ?
    mcasp->regs->GBLCTL  = 0;       // Reset+ l3 z3 A" g  S: o3 R1 v
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 I0 W  ]6 s+ v3 b
    mcasp->regs->XGBLCTL = 0;       // Reset TX# q4 Z1 L( O& X3 l% l' ?5 u+ i
    mcasp->regs->PWRDEMU = 1;       // Free-running. Z# Y( T0 N9 x; i, i/ X
   // configure McASP0 receive registers. |1 f) I  A% m3 b, P# x4 \2 t
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
) V3 R2 t$ x' K- E" I7 A* \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 m  k6 ~6 B9 _& a3 K  J( Z3 D
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. j' ^' r6 h0 u! c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- p; P+ ?( l& s3 Q: X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 O! w9 f$ j' K" Z6 b
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ Q8 }  v7 h/ Y# ]% w  G4 K. e8 k6 l
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: B4 _' Y7 W5 v( c; L  R. ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" e+ A8 ~6 b  |: m4 ?- q
/ ^, S* q+ T. i' E. _    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 d" b% m1 U' ^4 U( W7 q; h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) X2 e& t1 m) z" k: G( O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
$ s0 }* {. a8 B/ R) y; b  S9 ?3 _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) o4 f- @. e* V6 V# C! U% h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' N& ?) Z1 X9 Z1 o$ o3 W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  C) K  H, B" g# E
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  J0 n7 N6 n" a4 P. o    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 t, S' k9 q) z" D
* S) t( p' r: }, ]9 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- U, z2 C% P  z3 f! j  O2 i
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 s  o. T$ M; A" O( q. L0 d% _- Z+ C
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 m; F5 c% l1 F, P: ]7 `
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ M5 z; x8 R5 e1 Z; |& F6 X: ]9 C$ I9 T$ S/ V- J! r( s6 E3 \
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, Y( N. P! u9 l2 S6 e& _. R& q1 r# Y- B    mcasp->regs->DLBCTL     = 0x00000000; // Not used& a$ x$ s: X0 D7 r$ d- ?, f
    mcasp->regs->AMUTE      = 0x00000000; // Not used
' |( i0 `5 @- N- t* X. p
- v/ ^" I- q( M+ J# j0 M/* Starting sections of the McASP*/
$ P/ U! i, V6 W+ F5 b4 b9 I; r  y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 E9 h% }5 D- x+ c8 w: K" `8 ~+ s- [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * A3 m/ E9 f6 H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 [2 s' T9 Y" X( E/ o2 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ O) x; U+ n5 T: ^4 @' j( |$ C8 M: e& B5 L# H6 W
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& K1 j. O; P) c( }9 G9 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ g$ J5 b( h0 I* @9 H+ X- k; A( j    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; P1 u+ f) ~0 d8 i: T0 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* W1 [3 m8 c" q* q# o
  R7 t+ ~( e" D  N8 V  \
    mcasp->regs->XSTAT = 0x0000ffff;
  y& c! h! ^4 M    mcasp->regs->RSTAT = 0x0000ffff;
7 [. K" Y& U4 }+ Y; Y: V
) X9 M2 z* w6 {, A0 x$ c. A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 g1 ]8 k3 h9 r) K# u# W8 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; E' ?8 c1 q* J, Q) w7 ]    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! v5 m* ?- a+ l; k" k+ V0 p" o1 ^. t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: k" z! M. D( t' ]+ i
% Z5 C5 w( ^2 O" F" ]& l( Y    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 l' E5 w1 q/ _, L" E    mcasp->regs->XBUF5 = 0;
- Y1 V; @1 K5 ]    mcasp->regs->RBUF0 = 0;
* z& _* d% [- R0 z4 P. W& Z; _# ^; a( ^: J. q: M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ p7 ]/ Q' y: U! O- l& t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 \5 L$ x# v, ]1 H- O    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 E& X+ Y8 Z% o1 T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 P) ~  b' {" T1 r) `( G" T0 E) `9 P! v0 N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 c  r0 }1 _: n% s3 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# r+ o4 i# f: O
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; g) m" M# `4 k5 M! c! _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( l* R2 R( m5 x/ c2 I
( _* [0 J$ N7 ^) U* c
    CSR = 0x0000;
& Q; L& F6 w6 M6 x1 V6 y4 G    INTC_INTMUX1 = 0x3d;- L1 Z1 _( r( n+ o, R( Q5 t
    ISTP = (unsigned int)vectors;
2 @" P9 x' b6 t4 l- _, v3 y    ICR = 0xFFF0;  
" {( C! V1 g! i7 p4 `    IER |= 0x12;  
9 w7 G8 k' o# m( E) S" U8 A  s2 s    CSR |= 0x01;  ( V. ~% s8 V6 S: ~( N$ K) n
/ |* Z+ o6 d; [; R

# y4 g* t0 R- ~/ k. v/ P/ p9 u% R1 U# C/ o
还有就是两个输入输出函数:9 o3 j6 l3 }; ]% Q
void output_sample(Int32 out_data)' q, B/ }5 S# u/ k2 c
{
( {$ U$ k+ h3 R. ]5 H" `  AIC31_data.uint = out_data;  $ m3 w/ A$ z6 v3 b1 l# d
  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 y+ d+ V- p. t4 }( c) g. x% D
}. N9 ^$ Y' z' m$ `" P

( {% c, f& g" X5 k: L# d5 PInt32 input_sample(void)
! K6 N: X: ^* n* i{  
4 T' C. i$ N4 E' D' d  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 N/ C; A6 J+ w3 E
  return (AIC31_data.uint);
6 u% f+ ?6 m, j$ B* _) ?+ Z}: a; E, v4 F# b+ I2 ~) ?
. l8 G! s4 Y7 W& z" H
分享到:  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-3-17 06:24 , Processed in 0.047904 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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