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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% {8 h1 }. M' u& F2 F
main文件:4 `8 E  W4 ?+ R# u: k( H
interrupt void interrupt4(void)  
& T/ ^' C4 h# K$ j! O, [: o{
& C8 y# o! Z+ L- M' w! V- @3 B  Uint32 sample;
2 M* p7 w, B7 |; l# _0 j
; t0 C  U, A) Z7 i! \8 y8 E3 E* n  sample = input_sample(); // read L + R samples from ADC
% b( F$ x! U: G! }: S4 K  output_sample(sample);   // write L + R samples to DAC
: G* n  t( X/ [, D/ P" A  return;7 e; ^  H! C4 m* j
}
9 G, G& L( x* v, P+ J. z$ Q( x  \" a( ?& }' C; l: U' a
int main( void )
" W7 y( l  D: I, l- i{  M: A5 V7 K& K( ]- t: H

9 }! i7 n  p7 W    /* Initialize BSL */% l' z" m9 G' J- }% ?; t
    EVMC6747_init( );5 M; O6 w8 z& o5 u1 B9 O' ^) {
        /* Call evmc6747_intr function */& I- M3 H+ d5 s1 I
    aic3106_init( );, G% L2 p2 T$ E- k% I
        while(1);
) {. {6 v; n6 w% K8 w. k}
; L# V, A6 l( S) B- T. F% _" ?  [# |0 G/ D7 i5 ]1 i$ @

7 ~" g/ ]' N% L( `& _# w7 b* \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 J. j. Z$ H- X1 w& a) R& e/* Initialize MCASP1 */
' H4 k5 `5 z$ b) F% U    mcasp = &MCASP_MODULE_1;6 t+ Q9 n& B, C& g. Q% C
    mcasp->regs->GBLCTL  = 0;       // Reset' S* [  E  _, H$ l: g% q; u
    mcasp->regs->RGBLCTL = 0;       // Reset RX- o6 [$ U! @( R5 W
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ X7 g- T" L6 O3 S$ T
    mcasp->regs->PWRDEMU = 1;       // Free-running
8 @+ F0 h$ Q# q! t, J! _   // configure McASP0 receive registers
6 [. o6 b! D1 ?- b4 l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 P3 H% }$ S; `0 Q5 c
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 ]( x( @7 a' b) \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 d/ `. z% Y3 U' a' \! t( Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; S  a9 R: o( t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 `5 ?; j" a6 L! |$ ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 l8 h8 L6 W1 R' ^6 k! D+ D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ z; L( W2 q* C! M, [/ T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- j* H# W4 N& M$ P' n8 Y, R* z
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# Q0 N! o6 C$ _" b5 l! I* q! N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( x  F+ @, {0 @4 D# s
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; h) x/ }) c8 j: n' f. C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* Z: H/ X8 B/ X1 L3 ?9 O. l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 w4 ^3 k: k8 X! n+ q1 K4 ]
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. U) g/ c2 |6 ~    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: j: F% n0 B9 Z% o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* d' w& s$ e! ]. y; V7 w: ?6 B$ l
8 T' U* g8 ^0 M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* i1 ^. a* ]$ T# R8 z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 x$ x4 i) }8 G( P; }9 W! M& Q    mcasp->regs->PFUNC      = 0;          // All MCASPs
# P; y( M3 s1 ?  G$ O    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ @# d1 y; W$ A. m  |) E. D' `9 B% K
    mcasp->regs->DITCTL     = 0x00000000; // Not used" p% i5 u7 ?7 {8 O# O/ z9 J( \% m
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ R# R& ~) k# |  m
    mcasp->regs->AMUTE      = 0x00000000; // Not used
# o5 e. d6 r  g
$ }; u3 ]3 {  _0 r' M' @/* Starting sections of the McASP*/9 l# K& S3 M, i* k
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " i/ J% U" U2 m0 A- H+ \: s) h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 S, Y& n% S# M- [" }" A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 d4 H+ I2 b5 I5 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# ]% }1 z0 T* W6 `' m8 j5 u0 ^
; |$ ~& P5 m7 g& j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , @7 J$ j  L' [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  }4 R: Y; T# t6 Q+ k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 J1 V2 W# d- M$ i: D1 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 d+ _+ K1 T# p2 T: I

# j! Z- ?) C- T+ W! {+ r4 Q    mcasp->regs->XSTAT = 0x0000ffff;
7 e7 K" }- j- }# n3 z6 y% k3 q    mcasp->regs->RSTAT = 0x0000ffff;
9 d2 {& M, J0 q1 t# F( o. z: x# Q; u5 Q! x
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 Z+ ?$ ~  {. ?* }/ A4 j0 x0 O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 F1 R/ _; t, X# g# R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 ]- u% q8 x+ W9 S6 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 V" g% M3 ]- L: F
5 q( j% j1 O  g    /* Write a 0, so that no underrun occurs after releasing the state machine */
# r. ]+ r, {9 h# Y* u9 J    mcasp->regs->XBUF5 = 0;
2 b7 `& \7 [* r3 o    mcasp->regs->RBUF0 = 0;) B. l1 _2 e5 [( \$ r  ~# d; h  v
! W' q# `" K/ S9 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 J/ T8 `8 G! \% S8 c" @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( o2 v, M+ n1 A- x  s" K  K! k! u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! J; J% P& i; q+ g8 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! w4 m/ p# ]4 t( H

- G! j/ E) V$ X3 G0 n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* }5 |% F5 t$ f3 S9 z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: a6 \) p" M+ ?9 ~    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; w$ F1 B, `7 J: G6 u) q: [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ I, t2 ?" ?3 |1 p4 M! a
' R  i: \8 @: L7 h& ?
    CSR = 0x0000;
( k9 _* Y' ?  g* U4 P; E1 P    INTC_INTMUX1 = 0x3d;, a! B4 Q# s% S% a; b0 |
    ISTP = (unsigned int)vectors;2 Y2 J7 Q; p2 y$ b3 N9 U, }
    ICR = 0xFFF0;  2 ^' z7 w  N9 V, K5 w" X5 i
    IER |= 0x12;  1 j- W5 U: e. H0 x- m7 D& {1 b
    CSR |= 0x01;  
1 T. Z# q% x3 q, p' X7 x) I3 y  R& N' x3 P% Y0 V& B
  R2 ?9 R2 W2 h2 {. Q
: U; o, E& t7 a* a0 P
还有就是两个输入输出函数:
( x* N& y3 z; `6 I7 @8 cvoid output_sample(Int32 out_data)/ g3 q& Z* X4 H8 a: B! `( N
{/ @8 ~; V6 x  g, T$ h
  AIC31_data.uint = out_data;  
: l7 n5 w+ Z; s. z9 {  MCASP1_XBUF5_32BIT = AIC31_data.uint;* |& T$ u3 L/ i9 d, K
}( V$ `/ _1 e2 ]8 S$ w* n
  K% }* e1 B# X/ C
Int32 input_sample(void)/ u9 M( ]! e5 n" D; s! l
{  
8 w& K5 J3 Q& F7 C3 _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 P0 R1 Y" D' d6 p# S  return (AIC31_data.uint);
  o! z/ G& D- U% A5 s( Q7 J5 K6 I}. l/ Q; ^2 ~: S: s3 U/ o
) e# _+ ^5 o7 [) M& W# W0 i
分享到:  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-9 20:00 , Processed in 0.042224 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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