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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! L! `: m- ^. ~  D; q' X; U6 c( Mmain文件:
9 j6 ^7 ~7 A/ G  X  r1 S$ \interrupt void interrupt4(void)  + D8 t+ y9 r& _. N
{( ?0 Z  M  S& d  l
  Uint32 sample;. {; \, s7 Z, {3 w4 h) B

$ N# d$ w+ ~9 {, i# }& U3 i  sample = input_sample(); // read L + R samples from ADC
0 l0 M* F% e0 E1 F: t  output_sample(sample);   // write L + R samples to DAC " s0 h; V+ h7 G! k
  return;$ S' l; l! I8 [6 |" i
}
/ D2 a/ I6 W7 A# e" a# V* x
+ E& A* g" z6 `% aint main( void )# W2 ~7 j! Q, R% s2 q+ z
{
% J: h% U# |+ s7 o, q; I. B- A4 o# s; b8 s$ @) y$ j0 W
    /* Initialize BSL */
6 ^" X+ C- C: j0 m& L8 E$ q0 m    EVMC6747_init( );) l5 l% v* b9 G  z
        /* Call evmc6747_intr function */
( T4 ~! J8 t; X( ^    aic3106_init( );
; c4 f; q4 f1 U- i        while(1);
: S5 _" `1 s2 e! e}
& {9 x# D; `2 h! o5 |+ d% E+ H8 p
# d+ \$ W8 s( ^) g7 N7 A. u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 i! W! g8 K2 C. |* q+ W) O; `
/* Initialize MCASP1 */2 k3 ~6 y! e4 {2 m, E8 n4 ~4 c
    mcasp = &MCASP_MODULE_1;) ^$ I2 x3 F4 j" o. N
    mcasp->regs->GBLCTL  = 0;       // Reset
) S( z/ p$ T! A5 r; b: Q    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 u0 t5 t$ {6 W+ o4 l) o    mcasp->regs->XGBLCTL = 0;       // Reset TX7 o4 X) D5 G4 q. N: U* P( M/ }
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 B0 C/ }( u- f6 ?  C  H   // configure McASP0 receive registers* B1 T( P9 Z' B; s1 M
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. M7 t  Q( o, {7 Y) `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 W4 H" w, U/ X1 ?1 E7 I
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: M7 Q1 k' s/ a  {2 i# J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). ?; I. m" J4 n, l9 _- ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" J/ @  O1 n. G3 P1 U( S$ a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 s" ^3 H+ K2 }1 A7 `    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- G9 P; F  f4 ?. b! D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 E4 \0 R; b2 \4 y/ K& f. _$ O
. w' |/ C+ C3 S1 u    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 D9 S$ G2 [9 w3 Q$ y+ a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 z5 a" Q1 w, \2 j: ^+ W" A6 B9 @
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( A# f; p/ Z0 z1 P1 L  J2 S/ V/ e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ @: O+ y% Y3 h5 ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
9 [2 N: J4 ~5 I- R- G    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, I5 l/ ^- a7 L: a/ L! T! W) V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 a1 t2 Q& d$ `7 c' r. ]2 h; O    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ a( P6 _2 T" h3 C1 c6 t

9 t; f/ U( H. P1 ^2 G- `    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 \3 D& |, G( C* }" s1 \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; X6 w7 E% K# E- \- [) p( ?+ t    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 g: S0 x3 N* ~1 l" R6 M    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! C8 {5 ?* C4 E

- O) T1 i% U$ \( m0 f0 v    mcasp->regs->DITCTL     = 0x00000000; // Not used( a* G$ |, Z) D) u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- f# @# z" ~2 t( P( z    mcasp->regs->AMUTE      = 0x00000000; // Not used
) B$ n, p% Y& S2 S  ?# [
" P% Q3 `& }# ]' Q4 v/ O) C* @/* Starting sections of the McASP*/7 x: O' V5 v9 B7 A" G5 k
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) g7 k! _+ E9 V2 k, @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 q' }- o2 k' D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ i  E8 y1 i4 c+ Z7 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 j$ g- f: N5 |! Q& O: G2 ^6 I0 @
! G7 D% M8 R/ C" B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 d( \  k9 z6 N6 Z# W2 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( s) L% M( p4 E% _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) b# e; Q6 M0 D4 ]; x& G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" Z: K. W$ q' Y" ^1 i

6 w  P% l4 }8 v8 z; V    mcasp->regs->XSTAT = 0x0000ffff;
5 ?  F1 R7 P8 L- O/ G# c    mcasp->regs->RSTAT = 0x0000ffff; - J% J: m9 W' Z9 E
% ^, L- s2 ?- b! A& `' n3 z+ {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 A8 L3 w3 j) Y% @; p& {3 }& y2 G; P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. Q  @' i- `; M* {. X' N2 P) d$ o    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& N4 h, W( p5 F; N: _) X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- ]( ]  t6 Y( U# ^7 G6 S2 M% q% Z; ]  L1 X6 p; D9 Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 W2 w6 {# L/ U) k    mcasp->regs->XBUF5 = 0;
2 w' j0 E. h% r( B2 n    mcasp->regs->RBUF0 = 0;3 w" u0 {6 K. ~

3 r1 s5 D8 }/ {% W9 R) k9 a4 F    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. r/ w0 f/ y/ F, }3 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 ^) }# _4 C9 G0 y: r" @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. Y( B  O9 L: V: H  `1 g9 }1 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. v; U6 C, w$ r: g1 _* d( @+ L9 y! ~& {0 ]: J0 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * }4 W/ @0 @. n+ P* G7 P$ ?' ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; ~  Y4 _( d1 q4 q- F  ^. ~& t  k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 G- ~( \  }& o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* ?& ~8 [  f, \6 d
2 ~: W8 J/ T2 D1 t+ D% k  N
    CSR = 0x0000;
, z. G  D6 H! D& H    INTC_INTMUX1 = 0x3d;
. A- N+ h, X& ?; h    ISTP = (unsigned int)vectors;
; ^: Z' W: k7 k    ICR = 0xFFF0;  
* a$ R% k" s7 o+ x! E    IER |= 0x12;  
8 m7 Y' Z) N# H    CSR |= 0x01;  
* {) }& h# |$ r; V" n+ S* c
) L$ W, _+ R7 z0 o1 o2 R
1 B7 E) B7 W" z* R% }  M4 ^( ]
% ?, R5 @. m  s8 _) s5 X还有就是两个输入输出函数:
% k: ?7 P# ]4 O  N8 xvoid output_sample(Int32 out_data); T4 n4 ~' w2 F  H
{
4 `8 G- b$ H! a7 H$ X& [  AIC31_data.uint = out_data;  9 l# }( _' x$ E$ e  X- X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 `9 K" G/ E; j1 z7 l. N  G; i}9 P  d9 ~+ `. u. T/ h

2 b5 u* s$ C) F! `: |9 D7 l3 y9 EInt32 input_sample(void)
( J6 K6 f7 O8 |  z{  & V( m9 V2 h2 e, T+ T  |' I
  AIC31_data.uint = MCASP1_RBUF0_32BIT;* n: `, n; c# R( b# Y
  return (AIC31_data.uint);+ a8 N8 T! Q- w4 L$ R
}. L2 {  S4 v6 d$ \
6 l/ h. d9 h' |
分享到:  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-3-2 23:50 , Processed in 0.042059 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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