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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ _, q) t# Z8 v( ~2 Ymain文件:
! ~! y8 L. F/ z: Y: [interrupt void interrupt4(void)  
* A3 M  |, _* p{
2 n9 q8 {# ^$ M; o1 Z+ f6 P! [  Uint32 sample;, W  x9 ^: U1 [5 _4 L/ Q

/ I# j& p% Q7 `. J! X  sample = input_sample(); // read L + R samples from ADC' g& R! p$ }/ s- Z1 F2 `
  output_sample(sample);   // write L + R samples to DAC
! n0 N  `$ Y& @1 G# B  return;
$ ^, d% F' u) A9 @& P}
( B' T0 d* U' }) u' Z. A& C* o" O* C3 o
int main( void ): C% G! ?- f0 j& }7 k
{
0 x, Q  p: m/ r; P5 {% J2 T" {2 c" c; q7 d' f. S
    /* Initialize BSL */
+ ^) v! T  N, k8 n* i    EVMC6747_init( );% H0 R& C  U/ X% u
        /* Call evmc6747_intr function */
  o, \  W. f0 y( D1 g. u6 Z    aic3106_init( );3 y1 I+ z! d' s8 _! `+ h- Z+ |; K
        while(1);1 i+ \$ z$ F. N7 T" `! s9 \
}! F! K  |+ @1 }# K/ D: |

" O! b( Y, ~) z" V1 n3 s. `# ]9 `7 g$ f& Q- Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; c& P; J% K+ e: g/* Initialize MCASP1 */& j& _( o+ o% x/ T1 V: G6 C
    mcasp = &MCASP_MODULE_1;
1 W+ f2 x6 X' s* x    mcasp->regs->GBLCTL  = 0;       // Reset
6 [) X  m3 w: `$ n) I9 j    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ ^$ k2 ^, y1 y4 v    mcasp->regs->XGBLCTL = 0;       // Reset TX- ]# E4 u# R) |3 n% _- Q+ r+ \
    mcasp->regs->PWRDEMU = 1;       // Free-running
  V/ B2 R: n' P! q' f0 p   // configure McASP0 receive registers# d6 }6 c5 A7 {+ _
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* P5 [. I) F( t# v# z' B  ?5 [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! o5 y; P' c  `5 |& x4 i
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 c2 ?6 u9 l, ^* z  Q1 l8 S  m
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 ?7 k: L. Z& J& B! Q" }- A1 o# L* _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 r6 C+ a8 h+ L8 B- o    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, s; W" `7 ~6 ~/ Y' g4 w" F6 \( w    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 R+ j( @" t, C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ k- g1 w& J% n8 _: S
. ~2 ?$ c2 ^4 x; R
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. v6 {- B% v$ @2 K    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ I+ i9 y7 f5 f* d) p0 N, H    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ |7 y7 m8 R# Q5 T% o    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, w& M# }6 w  x% w3 b: V" ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) Q! T% q0 C8 p. }2 i* R$ U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) k& x+ P/ u2 I7 L6 \' J% ~  q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 ^  }6 i# Q- G) p( Y3 V) q8 Z2 G    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 a- j; r1 ?2 C3 _0 ^
( _4 G! t% {1 i5 v5 i% ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! Q6 h2 C) M8 k. [7 O5 ^2 T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 c% ]$ t/ t( N
    mcasp->regs->PFUNC      = 0;          // All MCASPs# `0 u' I9 Z4 ~- ], b2 K; i
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' x  m& Q: m( s4 Y% N4 G! a' ?8 R) a" Y9 Y8 j
    mcasp->regs->DITCTL     = 0x00000000; // Not used" _% J6 h2 ~' R
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( g* C; f) }+ M! g: l! v& N
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 G9 ]0 r1 Q4 E. h2 U- c' j
5 y, C, I1 Q* |/* Starting sections of the McASP*/
  Q4 z! u, M5 L2 x$ \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 I/ r: q) x4 q* E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 B4 h5 H$ o) w* C4 ?    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 l. X* i* {0 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ s2 m0 ?9 T  b* h

- g' _8 x; n  A  y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + H! z* Q$ C' O6 N' I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# g6 y. N6 b7 ]8 Y& g- W) ~# ^
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & _3 @) B1 N8 K5 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 ^. B& f. P2 z
1 E: ?& y3 g! N0 k    mcasp->regs->XSTAT = 0x0000ffff;
9 q, p& j) d( y4 i( m0 Y    mcasp->regs->RSTAT = 0x0000ffff;   N: _/ R8 S8 I* T9 a3 m
2 g! X( {. y' S+ J$ t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& N7 I0 b$ W9 H: Y6 w2 r) c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ^+ Z) `# m, G  \    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 B% R" w/ z4 B' i, T% m' }- ?9 ?1 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: t1 Y3 G) ]; \4 E$ m6 {$ d! Z4 l- W3 Z2 J3 C1 k
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; ?. l) w+ D- ^" D$ |    mcasp->regs->XBUF5 = 0;7 Q, e* @5 F/ P7 d" z/ Q3 i
    mcasp->regs->RBUF0 = 0;
6 r, }: `0 m* E  b' K/ d. z/ B& F3 ~" b( S- u  M  C$ {
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / f9 M% c# y7 R1 n" Y* o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 o+ a# P# ?. J2 m7 t
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 m, ~" o  a& E* H" f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! T# }; w4 t8 s1 n" s

. s. V$ [% p9 P# C- \. j+ e4 \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ Q2 A. d3 `$ {- z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 T/ a5 t5 z2 O! P    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% W& ?$ t( U3 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 P% l+ Y# t3 f' ~
' V" @  C* |! V- a/ Q* K) q! b5 ~+ E, n# F
    CSR = 0x0000;: i1 q8 C. [5 R& b2 }
    INTC_INTMUX1 = 0x3d;
; U0 F9 R! l' J( a3 ?/ t    ISTP = (unsigned int)vectors;  W& V0 C/ X% a7 u. z$ N0 T
    ICR = 0xFFF0;  6 s( L; }& g0 e' A! Z! c
    IER |= 0x12;  $ X4 W3 X, B8 U: ]& m. b
    CSR |= 0x01;  ! r! M8 M; J* H5 H
# M  i+ M/ W$ q0 g8 Q
0 M0 e8 T. }# l5 m' R

1 i) r1 f6 s* n8 S还有就是两个输入输出函数:
; P* q4 x8 t- E  E0 svoid output_sample(Int32 out_data). m- z  z- \9 F& B) V6 _7 }# j
{6 J; c1 X, S& Y' E
  AIC31_data.uint = out_data;  7 c( V) d$ M. [2 p6 L' c1 }1 O8 ~
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# f( B. O; I2 z}
/ c+ S. O8 J: C# ~4 ^5 O0 c; e7 ?& \5 P; ^) X5 x/ ^3 R9 O+ J
Int32 input_sample(void)
8 s' H0 C3 c6 D0 i1 r) ~9 g{  
! l7 D: k$ S+ r2 o; |% D  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 t1 q! i  p' j  return (AIC31_data.uint);
/ |: i/ Q  o1 W: W( M}
/ K: p( l: {! a3 B5 ~; Y3 @
! a- t; Y2 T/ s9 n) r  _7 S" e) A
分享到:  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-4-7 13:14 , Processed in 0.040167 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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