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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 y# E& \6 c! tmain文件:9 k' p- v# s; j; g' p' @
interrupt void interrupt4(void)  , w; n5 o( o/ J7 ~9 m9 D
{, T/ e0 Q4 M8 e4 d/ }
  Uint32 sample;
4 p  N) z. R$ {) p" X0 B
1 O% ?- T. }' Z/ D( ^  sample = input_sample(); // read L + R samples from ADC
" C3 p8 K3 S0 n, V& V  output_sample(sample);   // write L + R samples to DAC 6 P/ W# {% W5 A0 ?1 Y
  return;: p% s, a+ q# i0 A5 {- H( L4 g; Q
}
+ y. g3 {0 Q: A9 A
1 r: M9 x/ c- I7 Y; l# P9 pint main( void )" T' n( x) ]  v& D
{
, E+ ?5 k' F+ `4 a6 B( x8 _5 o3 p1 |% C# s# q( C  F
    /* Initialize BSL */- z9 @, I  q0 _
    EVMC6747_init( );2 z5 U9 }/ Q* j. A7 Q& C4 W; c
        /* Call evmc6747_intr function */% a" G+ F! D' w* t0 j" r
    aic3106_init( );* U9 H& z% v  L
        while(1);
4 ]8 J1 ]) n, _1 [$ I" u) s}$ E# w* J! w9 Z3 @* y5 l

. Z; h, u9 r4 s
6 C2 p8 L8 e  x& _$ maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ g  r6 p! t1 U9 d/* Initialize MCASP1 */
. K; r. j  S6 x! j4 {    mcasp = &MCASP_MODULE_1;7 l/ A1 X# j& v0 Q( B( d
    mcasp->regs->GBLCTL  = 0;       // Reset7 l3 W4 a6 |+ ?+ C  j6 J
    mcasp->regs->RGBLCTL = 0;       // Reset RX3 O2 U( z$ H+ v- O  v" @, L' o
    mcasp->regs->XGBLCTL = 0;       // Reset TX9 Q- P& Y/ d2 _; H
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 u# \4 `, U4 w$ K   // configure McASP0 receive registers
  W4 Z5 s/ s4 N" _- s# \- i; x: d    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# r  w8 o7 f! j$ D- |% R    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 h5 F1 e( [  U( _7 M/ V    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 l0 @' _( E7 e' v+ E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 D, t/ X7 G) O8 r" @9 Q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* z5 |+ ?4 w3 w: C" j2 {2 m' N& t
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  D' g5 z% M$ J( c: H, J3 \& @! t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) v- w$ @6 X5 S% I4 x+ m4 F% ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 |3 w6 t' H' B" f- W% ~* W( ]0 m) \; P4 q% w
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( M0 |$ T. b. M3 p# `1 E  @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) n, U; h' X; r, [$ ]) ~2 |/ \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# [5 d& F8 T0 z" R/ q) V' ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ u, ^5 u2 L# q# _% j- M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. T* G  @4 r* q; u' `, L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 K  M) Z' W1 x( l3 j/ X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  w/ N1 G3 D. z* h! H    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" S; u" g( P/ M5 S/ f

- C( c) }  q! e. M6 A( r    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( u4 P" Y9 ~( Y$ w; h    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 G/ \7 I: b. A" y. G    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 T! D% P. z) `    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. a8 ^: m& W6 b/ j9 h( O7 T( N/ r- D" P- o4 Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ j: t2 A( O, P+ c$ u, @& R+ \    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ P# }* F  j( q( g4 B
    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 g& U0 k# v' L( F; V! ~7 G0 b# R6 f, q* V
/* Starting sections of the McASP*/& @/ J& ^* E9 m) H$ N
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 v6 {+ V% I9 a: F7 L3 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 @" n1 d4 [# o9 [% {0 i/ k! F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 A2 Q. G# _# @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% f* B0 K" }% Z9 u* ]0 w

5 b- E4 X. `- c  x9 T0 z( e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 N7 a% u# V/ f& V: I) m. k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 {7 _3 `# J8 J& t! b% L+ M7 x, E
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# f+ f7 R# V8 R1 b( \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 e( L6 A& }' p9 B# `1 q, k/ _4 ?! i
& q+ D$ Y% D4 `% a! y    mcasp->regs->XSTAT = 0x0000ffff;
9 |* h* D  f& x    mcasp->regs->RSTAT = 0x0000ffff; 0 i$ t7 D" M, M. T
5 d, M: |8 Q4 x3 N8 }( z6 a) J) i
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 ?' \" q6 X/ u$ S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, [3 x) s8 b) a6 e
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; f# I5 G) a& z, Z) D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 _. Q: f7 B1 s: w; S

8 D) g$ O" ^2 A; R: F" N    /* Write a 0, so that no underrun occurs after releasing the state machine */
, T4 g( X  ?. o. r- P' R    mcasp->regs->XBUF5 = 0;
5 ]0 ?% P. I; T- a; |    mcasp->regs->RBUF0 = 0;
: u, n3 z( ?6 S1 v& m. P% U5 P, ^! l" ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : o/ F; z  ~6 X$ H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! L/ g9 z- i( U7 O6 b; Z    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 H# p* u! G! T( E# n% @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- l( S" d& }4 d7 m+ I/ {& _# M
$ [" ^1 O2 ]: C) i- N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" z, {; |& ^! `$ Y$ n9 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: o  b6 _# f) a2 e* f    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 w) M, ~( M% ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- n5 J! ^0 J4 W, Q1 g
5 L5 `/ u( l! a    CSR = 0x0000;
7 ~; c! _) H2 B3 v    INTC_INTMUX1 = 0x3d;
2 h& L- a9 ?1 u% |9 A- ~. l    ISTP = (unsigned int)vectors;7 g3 R" s( |6 s6 [/ h6 I
    ICR = 0xFFF0;  
* C1 j. {- n3 z) N" g    IER |= 0x12;  & y& X; k. Q! T$ k
    CSR |= 0x01;  
1 m, s. q4 j6 A  {7 Y7 a
9 E' Z- K: H% f7 f' h2 L0 f. q5 W) y
' o+ b- j7 D: o) {$ W+ D: L8 l% @
还有就是两个输入输出函数:
* d' q7 n* t  tvoid output_sample(Int32 out_data)7 O) o* D8 _% f9 G# ]
{
' R( x4 N' b  V( s: d) `. |  N  AIC31_data.uint = out_data;  
0 T  R7 b- ~/ }/ t; n6 D  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" Y+ R: x8 c! v( _}( w- O) Z4 v7 y! T4 q4 x5 R  J4 n

2 x3 C* U+ E; ^Int32 input_sample(void)
4 P! Z3 k  D7 m/ G: g- \# E. L{    d: P# e; s8 l6 b
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 Q4 E+ k- B5 Y$ Y  return (AIC31_data.uint);
( `& ]  y! w' z3 a) ^0 V* a$ ~0 [}
( C: S  M9 d+ `( }1 d* g% a/ E5 S
1 F9 W2 `" Z1 G1 o
分享到:  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-2-25 13:03 , Processed in 0.040287 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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