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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 f. M, u- y4 g1 Smain文件:
0 k9 }+ M- {! A% t! Binterrupt void interrupt4(void)  + j) d3 z* K+ o- q, K% A
{
( u" z# B6 o4 r' w6 ~, Q+ [  R4 P  Uint32 sample;6 c- M& p$ ?+ X; q: U0 r5 C. s
+ D4 z/ _$ m3 w( a7 u/ ^! y
  sample = input_sample(); // read L + R samples from ADC4 v$ r( i! @9 Y
  output_sample(sample);   // write L + R samples to DAC / w, d8 t4 s# f- N9 V
  return;! U8 b+ V6 N# B" J& e6 S: l9 f
}
. [! C) d7 |7 e. M" A5 N5 s- R' k) A- [2 Z
int main( void )2 f. Z7 m' C) j
{
5 d8 v- W7 Y8 M+ F
% F8 o$ s9 _2 K, m    /* Initialize BSL */# _) ?* y! \  P
    EVMC6747_init( );
) D0 v+ y" |; P8 W9 u        /* Call evmc6747_intr function */
7 u# u0 S  @* B1 {, s; a% d    aic3106_init( );
5 ?" d( \9 Q  O6 N0 \' d* g, h# B        while(1);! @3 _2 A7 T0 P9 O5 ~
}
7 |3 h% s0 n6 s* B
; V$ U  B* K7 W) E4 S$ }8 W
* T7 i, m3 {1 N7 d6 _# T* Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 a) C7 ]. U% u/* Initialize MCASP1 */& K6 e4 i. F$ E: C3 e' ~
    mcasp = &MCASP_MODULE_1;
+ n8 c1 M7 |# l6 g    mcasp->regs->GBLCTL  = 0;       // Reset
; _0 b* `% U3 p9 f    mcasp->regs->RGBLCTL = 0;       // Reset RX
# |: ?" E! T$ `5 f* R& d    mcasp->regs->XGBLCTL = 0;       // Reset TX: S' N  s% ~" n3 d, z) _7 V
    mcasp->regs->PWRDEMU = 1;       // Free-running2 Q0 {& t& }+ g* p$ J
   // configure McASP0 receive registers
7 q$ B9 D. x2 ?+ y4 P3 n! O; l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" Z( _. ~- ~* Q% _+ G7 `0 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. o/ l* n9 |, l/ l$ M3 W: ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ p) i4 c$ G* S& X# x& B- W* E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' A2 E+ g* b3 G) F/ y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% r" \1 V3 H! O: K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ a: T4 H  a% v- r# s
    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 g( k& x9 m, z! b+ c" H
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, p, }8 J* e) h( A' W0 I% K3 M( `1 E4 ]+ a5 B  d3 `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' h2 `" ~* u+ @; N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! l' r" J' N; N; Z( R    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% c/ v- q& `! e' [# [
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& F5 r4 a0 g. u1 k3 z( K    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, V+ \* U4 x& u2 x; t$ {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" |7 a) R7 k3 v, X( @    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# G  V7 a# E8 ^, o2 m! k& y; \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  a$ v) q' Q; t" B
- m( X. q& x9 f4 g' n9 H! J    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: B1 |8 ^' f2 H/ q% i( s0 |
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% K# `2 }" ?. ?1 \7 W  R    mcasp->regs->PFUNC      = 0;          // All MCASPs' O- x- t9 U% `. s# |3 E* u
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 N( z1 Z" ]( c4 x- y
' ]: z% }8 Y) ?) |& [1 P, J( a    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 P0 g+ k) J# p  g! x2 E    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ F  X+ p" Y6 C; l0 a' l; C
    mcasp->regs->AMUTE      = 0x00000000; // Not used
( J8 L8 t$ P. H- O3 l# b" B& T+ p1 W8 C
/* Starting sections of the McASP*/1 {2 D8 ]+ P$ f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' B% W# s: S: i" u2 C' `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ p- g8 J; p/ H/ h  m1 ~' f    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 c8 l) _; x8 ]/ R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# _5 J3 D$ G5 @  J  n% M

1 c1 O3 w% m  T5 w9 z9 H5 _: ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- M: a" E: p. ~! b5 Y2 y. p( ^9 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( {# d9 k7 {8 T! i  z  D6 z7 y& y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) h! _, o) ]% N& d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* P$ L9 D0 P8 q, M; \
5 A2 D0 }4 t+ o3 E- J+ W
    mcasp->regs->XSTAT = 0x0000ffff;   @1 W$ S, t' o- }
    mcasp->regs->RSTAT = 0x0000ffff; 8 O$ h- I. s% ?5 v* t+ p& s: u
$ y1 R% ]7 l% t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! O) c/ H+ Q4 B& K; ^9 N/ M! T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: G* x* b' T8 ~; B/ V
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 G9 S. R8 i- G2 E8 t6 L# |& p6 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  u6 z1 s. c+ m3 p% n# D0 d! {' p- z3 N- e- d, n1 F) x, [* T
    /* Write a 0, so that no underrun occurs after releasing the state machine */" F- H3 w* D* P
    mcasp->regs->XBUF5 = 0;  w  {  G* T  L
    mcasp->regs->RBUF0 = 0;* t6 y# E1 z; v0 S8 w8 D! M8 ]
- D& z% `; Y: O  B+ p1 {. N3 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 M5 t7 _& v3 N* o( B) N# v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 P* }0 |6 Y+ C/ A; g9 O2 a5 l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 t- D! j% t" C2 p1 V9 R+ j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& @0 N6 T  J. F, g* c" F. ]  V- h. W5 K7 }
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " |2 b3 j' I6 \9 h& B4 U) @3 j! E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 W2 l# u: g2 J/ ~  Q
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% c' X' O$ u  O# O$ N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 s" i& Z! C$ x7 d2 }! S1 G
1 k- j  \2 D+ ~8 }4 X5 `0 J    CSR = 0x0000;
* [% W7 v( u8 v' u! c    INTC_INTMUX1 = 0x3d;
6 _. I! @& b/ ~    ISTP = (unsigned int)vectors;' u+ D0 ~- m; p/ T
    ICR = 0xFFF0;  . B3 k! z4 w1 Q3 p
    IER |= 0x12;  
4 f8 z8 g+ B$ Q2 I6 V. t    CSR |= 0x01;  
: s0 ^4 q& X. }: g* X7 ~5 m- ~! A+ h! v& J* p
- ]0 f- @* s- h6 H& r
- k& a6 ]2 b% _6 Q$ m! q, P  Y
还有就是两个输入输出函数:3 N7 Q7 y* u- b. M- v
void output_sample(Int32 out_data)& O" D0 W* E3 R; p6 @0 z
{3 c$ v: G- _  J
  AIC31_data.uint = out_data;  ' I, D& W6 c& B5 A: i$ o$ c: Q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 F" h( f' A; J- v* Y
}
! q0 \4 [0 J$ D$ x/ }2 v- O# d) H3 H$ O7 E# u% D  H
Int32 input_sample(void)) j3 b4 u7 y/ M' ?% r/ I' m
{  ; W1 N1 e$ B' S& P
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 i. C$ q2 Y0 J
  return (AIC31_data.uint);& @0 ?( f  P/ ]  g5 ]8 g1 J
}+ n) y& F0 M; V  x' h; Y

; `: d7 l7 z+ T4 p4 v( _+ M- g5 G
分享到:  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-21 11:02 , Processed in 0.041406 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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