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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" [! E; @6 A% K0 \2 V+ |
main文件:
. \& t4 T9 Q5 a' c' Ointerrupt void interrupt4(void)  
0 l5 X" s# o) x3 T& |3 e, d6 c4 [{# h( S1 ~3 z: _' n9 S' U
  Uint32 sample;
  V% r8 }5 ]2 e+ B' T
, v' m) E& K" d' U- c  sample = input_sample(); // read L + R samples from ADC
6 Z$ W& d4 w- W' l5 r! r  output_sample(sample);   // write L + R samples to DAC 8 s6 m& p5 d6 z9 F2 W' X' m
  return;9 H, ~& F/ ]; f6 K2 F! m$ a$ o
}
% l4 x' A  p, E, G/ @. L" n$ C8 I8 G% l  g* ?6 l! k$ R0 o
int main( void )8 A% I) W6 c; ^* k& y$ o* w& u
{% C; _) X$ t5 M$ `: q; o
2 ?1 Q5 R& S) e4 C! n2 s2 U+ p2 \
    /* Initialize BSL */0 |/ `* G7 @* h% [* n& S  t( W! [- J
    EVMC6747_init( );
, P7 z: D9 |# q0 R        /* Call evmc6747_intr function */
+ c9 X0 ?9 }2 m/ b+ m    aic3106_init( );
/ g* \9 A2 s" X: h. o        while(1);
+ S2 @$ ^* u7 V}
8 U8 n: K! Y( w( o* q/ O  f9 x# p' X, \/ c& ]7 f: Q* t
  s+ R' {3 y: X" l: \) E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' G, ~7 p* `, e* J4 g( \3 v
/* Initialize MCASP1 */
/ ^3 E# J; t) a" D9 ^    mcasp = &MCASP_MODULE_1;
+ j1 W) M2 ~4 _1 r    mcasp->regs->GBLCTL  = 0;       // Reset+ ~4 r) ~) Z/ I
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 w& L- N1 W, P; M/ M: h: X
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* {: t! j( c& v1 G! H    mcasp->regs->PWRDEMU = 1;       // Free-running
# |. ]1 ^- V" g! Y9 a   // configure McASP0 receive registers
8 A; ~0 }1 @3 i% ^    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& E: V0 O; L+ _/ ^* e0 C% f/ G
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 I- _# @* @& R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# c5 M5 R2 O2 |1 S; w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* z2 C9 r) ~8 z0 ^6 W8 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 Z1 H/ m. C2 B* Q# g9 {  `
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, H$ p. T2 ^# [/ I) J( f- _5 k( [
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 e% ^( s$ L- O" x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 Z+ w5 o% h( _  m+ V3 N: S
- L2 g# E, Y  v) `0 [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 L- L$ k& `0 x4 I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- g: g% y0 L  |' E4 M4 z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: a: p& t' T$ W, m+ S9 P. c
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, e5 b$ I  d4 g! e7 _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" v3 M3 b6 t1 v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- _. h) U; |' H1 t2 o( K2 d$ i/ c    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" k& D3 I# e3 ?* H& ?4 s6 ]% m, b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 ~( V! i- V/ |+ I; p/ E, \4 Y" B+ t% q9 A2 J0 v, O% Q( ]$ Z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  M% e+ O. J# v) s6 V2 ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 l5 Z+ u" P/ y    mcasp->regs->PFUNC      = 0;          // All MCASPs
! F: G2 U4 c. A& P: J    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: B# }1 {/ y& \* Y* t' E

+ {& p% U% z! m; V# E4 D    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 g: W/ S7 w- f    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 u6 h6 [$ D; v- A& V    mcasp->regs->AMUTE      = 0x00000000; // Not used* l# r  @* d0 `6 G5 E8 j; N( S
; {; {( B0 e# x' V% i3 A; i
/* Starting sections of the McASP*/
% _. X. R' z! n) S0 e% F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) B. `; {" B; P; o6 F& p/ `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & \# x0 }) |3 a3 L- w9 E3 ]7 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# G' y; k. u; O2 R! T" Q  k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* J9 n' M) X. _3 j/ A- d
$ X. h2 _3 P/ M; x3 |7 {& J7 Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% p. R! f. e5 X% O# x+ D% w4 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 H6 d( O6 Y0 z! l# L    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. F( e& ^1 U7 U8 K- w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' V& ]. Y, z+ z
2 }. p6 n6 m! N+ f5 S+ c( C    mcasp->regs->XSTAT = 0x0000ffff;
- Y% N( q1 d7 U) h! b) k5 t    mcasp->regs->RSTAT = 0x0000ffff;
; v/ J8 e5 P5 x& ^: Q4 m: N5 R2 |& `/ g- z5 s" x/ ?& w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 p- z6 ?' G, {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 }. [! i% x$ X$ r
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * \+ U; e8 b& H; W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  V4 ?# w, a0 @
. k' F: [3 J2 U( e9 q$ ?* T
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ \% ]6 w+ L4 `- W
    mcasp->regs->XBUF5 = 0;
- T- s8 T' s8 ^5 _3 m3 k7 x" P    mcasp->regs->RBUF0 = 0;5 f# C2 d- O# j8 h5 F) I

' @9 p/ H6 K" V$ t: Z! h- d' C- O    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ O- U: c9 a5 \5 m7 q* S" G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 h. ]1 s: N4 P7 N) n# Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 ^3 V$ t, R* Q9 c* D$ ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 T  C5 J& d7 F: U9 `* M
. Y. U/ s/ k5 ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 z: o1 u" n2 B) U, \, _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 ~5 r. z' u, c, s2 I0 D  S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ j% _8 i2 |; P: _/ F, s9 j5 S- ]% ?3 m) P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( g- G- D/ b8 k; ^. M; {
: o. ?4 }- d5 v
    CSR = 0x0000;
" T, `8 d2 X8 v* b3 B    INTC_INTMUX1 = 0x3d;
( H5 d6 W' @8 w1 k    ISTP = (unsigned int)vectors;! s. q- Y. c$ E1 _2 F' G& \. |
    ICR = 0xFFF0;  8 B3 ]0 [  S% J2 L# t
    IER |= 0x12;  
+ x$ ]/ |; \2 w8 p    CSR |= 0x01;  / b8 k6 l* k9 K3 n2 J% K

% C5 ^$ P3 x2 E: b0 c
- m( u* |% f. X! h$ S6 ?$ J# G/ H$ b4 Q0 K! ?
还有就是两个输入输出函数:
4 {4 j9 I3 I" Y, f9 t; s$ D) \" Svoid output_sample(Int32 out_data)# C: |  S; g& _9 \$ O' f: U
{; E4 d( X# w* _2 R9 G$ B9 Q% p
  AIC31_data.uint = out_data;  
4 ~0 N+ ~: [0 B" m% ~1 D9 h  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 }& Z1 A6 p; T9 s) L}
5 n/ T+ B: `( r* B) j$ F- T1 q5 g+ L* I
Int32 input_sample(void)2 o; z2 P6 M' e% v2 N
{  6 a  J' w1 `+ o; C, f2 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;$ X2 Z1 ?* c3 ~# b6 W- L& p: s
  return (AIC31_data.uint);
8 Q/ a+ G( r: B& W' F4 Q}
4 I% o, E7 I0 ?. A
3 ]( E/ q: l& `8 ?3 `
分享到:  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-28 23:15 , Processed in 0.035975 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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