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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& j1 ~3 h& ^! O2 |2 o$ {2 X  U: `
main文件:  [  q+ t" Y) e4 l% c0 h' X
interrupt void interrupt4(void)  
0 U. ?5 E6 |8 ?: I) ?2 L# l{! g% H$ W: a8 Z
  Uint32 sample;
9 G6 k" L2 o7 ]$ c2 z" R! c  H( p2 E9 t. r
  sample = input_sample(); // read L + R samples from ADC
( f% f3 R/ |- t3 I  J1 e  output_sample(sample);   // write L + R samples to DAC 7 d7 [* V2 n# b$ l
  return;; x1 a% `% A6 k3 M' f9 L
}
4 y; n$ g9 W8 D& P  ~% e4 U( {' U. D9 h. [
int main( void ); M3 s1 P4 H& Y. b1 V
{
/ L7 l1 I! {' Z
& N7 o$ p: m" Q    /* Initialize BSL */
) N1 q1 \- ]$ F( [) P' G  j    EVMC6747_init( );
/ r6 q/ X+ C& C6 Q        /* Call evmc6747_intr function */, i0 J% y3 Z; \( R- U# w& U/ V
    aic3106_init( );, ?' v$ B5 b$ z/ S
        while(1);
3 L2 D# J8 R% H' v2 I5 X! a}
  l; o5 g% j# F) X$ B( v/ ?. F: @( @2 [  f" f9 e

1 c. o. T0 v6 [; Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! l9 J2 e% n+ s# Q
/* Initialize MCASP1 */
- l( T" S4 ~4 f' t    mcasp = &MCASP_MODULE_1;) ]- N9 v2 C" P) r! E6 [
    mcasp->regs->GBLCTL  = 0;       // Reset6 ~' k  \, h- ]" ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX% o" ~1 N- q. C, t1 T  a, {
    mcasp->regs->XGBLCTL = 0;       // Reset TX" m$ ]+ q7 ^% T  I/ P
    mcasp->regs->PWRDEMU = 1;       // Free-running" ^# R# ]0 r0 ?' B# ]" V9 f) ]
   // configure McASP0 receive registers
& V7 z  U$ S6 {9 [+ V# V% r    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ r7 R/ K& U# g- l0 i2 f    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) I# i8 @* x8 ?% C' J; X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# [) S; X5 D) I+ H  @6 G+ p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ u& V4 d6 [' M, \5 }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 |1 Z% s$ Y9 B- T0 z- @  J    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 E. _  b" ^- k# u7 ~$ g2 m    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, Z- M5 ], [4 p: E" \4 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( _: U8 }4 T5 ]. i  I4 O* j" A- J# P& Z4 M: ~2 r9 P/ n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 a; A' @% Y. D) D1 ]2 F! I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V+ h5 ?. L1 V) }7 N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 ~. o& Q- b5 s6 I    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 F2 x7 [4 \& ]/ e! H- i5 c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 L5 m8 w9 f. ?
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ F: w6 k- n! s" ^1 {1 Z8 N/ c
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' ]7 L( O/ I+ e1 H. S/ [$ A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! y- k& U8 F9 L1 d& @! Y* |

; M  P; t& L5 A, e( V" f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( U; ^4 d, c( S# @% M7 [: @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 P6 Y, U3 z7 Z  A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
* }& `* w+ Q+ u0 L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' d& ]- _3 i* z/ q, @

9 j4 m/ s! k, g* H- S! |    mcasp->regs->DITCTL     = 0x00000000; // Not used- B' [' o3 [2 x. {- Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% n. U! Z( c  \) k5 `4 y    mcasp->regs->AMUTE      = 0x00000000; // Not used  p$ c3 v. g+ ]: W7 Y# |
  `4 j& B( }# {
/* Starting sections of the McASP*/
" W0 P) n/ L5 ~9 i, w# x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 {4 i% Q4 s: ]' Z! \1 O. Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 L) q$ g( y; x4 w) R6 A7 }2 y" J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' |+ W- R$ x, |0 n& @( |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) Q5 Z2 ~* j7 y* q; o, j: c

8 Z, [7 |  b7 \+ z2 S" [    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 }! `/ n/ y0 Z# f7 }$ F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ H4 O4 B: }1 T7 f8 ?    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + H. Z0 L: L& k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 t9 @/ b" x9 u& f

( p( \' \/ y5 H4 ?8 I/ M    mcasp->regs->XSTAT = 0x0000ffff;   V$ `2 m/ w# R
    mcasp->regs->RSTAT = 0x0000ffff;
+ {; G% M" r6 Y; S: d) }9 l* y8 S1 U5 y7 @7 t7 `+ ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" \5 j, h/ z" d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 f9 t# B0 y  |+ ~* _! G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , W, E% i. p$ [& n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. h2 s, c% o7 u$ a0 Z) p
) S+ Q  x, D$ R' [  S& K8 p, F    /* Write a 0, so that no underrun occurs after releasing the state machine */
, W$ D5 z/ N3 F0 D# |    mcasp->regs->XBUF5 = 0;; V8 l$ C! E7 J4 n. \
    mcasp->regs->RBUF0 = 0;
8 c- L6 T" [" |( Y% M, T3 M
( ~) Q& U9 ~+ h- ^+ v; {$ c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : t1 a$ P$ S! S6 y+ B! {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' e0 k* v5 @+ l+ l! j    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : ^: g% j6 r  H, }5 `! h7 B# q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" w( R+ `( f+ y" v4 z+ {/ t3 F7 F# z! m3 G7 h7 w1 }1 N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' I" `0 G& m# v, w, c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; Q  f) _4 `0 Z+ b+ v$ H9 j: B1 l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" B2 M6 n& T5 K7 a9 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: C2 d. i4 @2 N! ?9 a

7 C. R/ P8 W# @" Q    CSR = 0x0000;
- P! u& I3 C6 g9 c3 o6 w: t/ |    INTC_INTMUX1 = 0x3d;
" y% R  [& w5 V. a! L( f" y! Z    ISTP = (unsigned int)vectors;
8 k. [! S( t! M    ICR = 0xFFF0;  : d$ P8 X; Q$ u9 x7 r' v) Z5 j3 T' `
    IER |= 0x12;  
, l6 X/ \( {8 S1 c5 G    CSR |= 0x01;  
: m. l$ A$ R( a  W2 `, O: q# |0 O  Y. N) m

( x- p  \: O% N  C( b$ e/ \( B
还有就是两个输入输出函数:
# n0 G" I4 p) J1 h$ d/ ~* h" G+ u# y* uvoid output_sample(Int32 out_data). V3 l; G8 B9 d) _4 j
{
4 a* k1 J3 t" s: J% z' y1 ~$ X, J  AIC31_data.uint = out_data;  ) Y" U0 f& i8 f" b: h3 q, p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 ?3 x: \. c6 ?4 _& \( b8 h8 K
}
% D1 ^9 r' |1 m, y
9 o' r! G1 J. C5 i: H% F* eInt32 input_sample(void)* L1 N5 m" v% q
{  # e; b& f, S( h# ?: ?* ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 h& j7 f4 J/ ]  a8 ~
  return (AIC31_data.uint);
- c" a& V% A  T% f}
; c( ~. z! U$ u- M! [0 ?1 N4 W8 ^5 ?
# L0 [3 x& l3 O1 c2 m7 @
分享到:  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-14 17:22 , Processed in 0.042108 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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