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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# `! ]  T4 Y5 [7 T: d9 imain文件:
1 i$ l5 q& `# r& D+ ~% ginterrupt void interrupt4(void)  
- i0 B' q* o7 Q9 S{4 F4 H, {5 l0 k7 X( B9 H
  Uint32 sample;7 q- E1 w7 |. ]- E; g/ Z7 u$ G/ l

* |) h7 d9 Q+ u5 u  sample = input_sample(); // read L + R samples from ADC
% B) z: m7 a4 M7 P  output_sample(sample);   // write L + R samples to DAC
! c6 T/ Z& ~! g* o( p7 x  return;* |' S! d3 R, g. U6 |4 m
}. J2 ~% j1 t8 X' [% e
8 Z: U" @( t5 `  J! V- y, \+ V
int main( void )0 c6 `, O/ q# i
{
4 e( F. q  H7 T* r2 f2 o
7 O, z/ R: F$ l' n9 d# E    /* Initialize BSL */
0 N- O9 m8 I( \5 c( \) N    EVMC6747_init( );9 {: l- ^8 }1 E) {5 s' W$ k3 g$ [
        /* Call evmc6747_intr function */
2 `# [* n% j7 J1 T; M3 n    aic3106_init( );  X7 H1 o: b9 m% y
        while(1);
4 v: f) X+ ~' A+ P) f}7 @/ `7 G- D0 Q$ F4 H5 F3 T! y

# R7 U- ^7 {- v' |: K0 q- ~; U8 V, q: I8 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 P$ p" p* v. @- I3 y* N+ p8 h
/* Initialize MCASP1 */
; n7 X, g7 d$ _# n4 Z9 C: z    mcasp = &MCASP_MODULE_1;% r3 j, i" t: ?6 A% {; K0 u$ `
    mcasp->regs->GBLCTL  = 0;       // Reset5 {5 K  r. A8 C* C* {; F
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* p; r% |$ B, s' K2 H& }- a    mcasp->regs->XGBLCTL = 0;       // Reset TX# G3 Z* a, ^* t7 ?. s& d9 G7 u& `
    mcasp->regs->PWRDEMU = 1;       // Free-running
- J) }/ x" l1 ]   // configure McASP0 receive registers
/ U+ p/ r, _. M1 P% p    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ s8 s( O! N9 _8 J: P7 ]% {7 P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 }; T- V0 F: }: L! v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: k2 e# z( e/ O  K: f
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; r1 q+ Z+ e1 O8 W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 v1 w. [/ l' A- X3 B, K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 z2 F. n3 @# X! `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 Y0 Y1 _, G, C/ `8 d! X% i* V( E7 U; n    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! Y" c$ C8 R) X1 c' s6 d7 z/ P
8 j' ~/ m; I5 t8 k9 W( y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ L- L, ^1 G. a    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* d$ T6 j, R6 S6 H/ m! O8 z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 s* L( L4 |& r  S1 {  c5 ~& \3 E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 A9 q% c: D0 u3 o8 f1 x. b4 G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 @- y' [0 k$ ~
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 S' H& J% {2 q& l* v    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 n: \* k. d& B& W& G    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' Y& V* c. H& J+ Q

, a# ], {) F7 {( I: x5 F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! s% S* b3 B- q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ ~# ^" R/ r% @
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 k7 n9 |) _  d+ @5 E# e* J2 l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: F  _8 U5 g& ?% B! S3 |- x5 i+ W/ G" d) O; e, c& s8 ?2 t
    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 {  t$ n; f9 R6 R    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ A1 P4 N) Y5 t" S
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% W8 A# J5 d1 m& z3 D9 V% o
1 G5 V' o2 h7 D3 G/* Starting sections of the McASP*/) l; ?  K& [. L/ E# a
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + e. ^5 o. t' ~8 ?4 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' G6 _3 {. k; [" K- t! O2 l
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^  e4 z, d% |" p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" v% K+ T2 P/ Q  }( Y/ T7 C

4 t" F5 B7 D# S  @! T4 d: K    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 K) s$ v( B: v; G( T9 ?/ i- r5 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% U' t0 r" ?# }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( }9 X& S/ U8 z8 b) I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. H! _! D7 x- _, T7 U
# w  C* m& _2 U0 i& H$ B    mcasp->regs->XSTAT = 0x0000ffff; 4 N3 }& H. }/ V1 F/ X7 w5 F3 ?% r6 S
    mcasp->regs->RSTAT = 0x0000ffff;
7 }; k; m# d% M: l4 V* b$ v9 @$ l2 E! D7 A, Z1 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ J1 _2 _& i  [0 v* R4 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: t" s6 z' c: |1 x. H
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 G3 M+ l  R$ L8 u- U+ N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 K+ F! @$ W: z, a& |# u3 k5 \9 J6 [' x6 {
    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 ~4 L" D" `4 c5 Y# f    mcasp->regs->XBUF5 = 0;
* d1 \# V$ Z6 s0 E; ?! e8 v$ r$ Q    mcasp->regs->RBUF0 = 0;0 {) L+ L4 w2 \3 m1 C" G# T

' R: F6 D3 J" n- m$ J5 M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   e! [( D/ ]6 q$ T: a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 I* m, y8 d& D2 L9 H& c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 K) Z3 t' O. c$ D9 v8 L# N: `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" o6 A: _$ o0 f) Z9 Y' _, a3 u3 M2 D  ^. n( S" J
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 H" _. S; Q7 G+ x; r* s" \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* i& P& A' v2 ^3 }" a4 W$ H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' s% c2 A( x, O6 b9 t7 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" m4 q) L; y( H
. S( B7 H: |+ f
    CSR = 0x0000;
5 K* g& }% x9 [4 K; Q2 X    INTC_INTMUX1 = 0x3d;  ^1 \7 e5 {4 {4 c5 G
    ISTP = (unsigned int)vectors;8 d  L  e: T% ~7 E
    ICR = 0xFFF0;  
- S3 K' r% T) K2 `' i* K    IER |= 0x12;  2 ?; f; n$ k: |& L& s
    CSR |= 0x01;  
: [$ q2 O  H7 d
: _3 H# i6 |) y8 N2 }3 D
- R4 Y9 V5 ?, ~, u9 g) {9 A# S$ o8 _8 l" ~9 q* p( j
还有就是两个输入输出函数:/ J' q" @7 O* b- g, v, H& J
void output_sample(Int32 out_data)1 ?$ |/ I5 B( Q! Q2 H2 n) |5 s
{
! o# v9 S1 r. A+ Y' F5 u% f3 X  AIC31_data.uint = out_data;  3 ^4 h; [8 x0 n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 N) A8 x, s) D& A, _7 _
}
" z& y2 h, Y( N/ m4 U1 g: J, n, H$ \9 N' M0 E9 K& z
Int32 input_sample(void)
+ }4 m" F" b+ u+ Y) @{  6 ^- `1 R5 x7 h4 I$ W3 G0 {3 ^
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 W, M9 i' A6 p7 @- U  i& D. Q7 n) p
  return (AIC31_data.uint);
- Y: x& g5 M; N# H}
3 e% F* `5 N: I* e+ Y3 o5 j
2 F( g0 U1 |2 r& o! v
分享到:  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-11 22:02 , Processed in 0.039033 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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