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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 Y" J' x% m: B  |7 l8 c
main文件:
& s0 y, ~% V: _: I! x3 t1 Q) C$ Cinterrupt void interrupt4(void)  
' v  ~( R( z' {# U. G7 X{) T9 \4 L* b+ J0 \7 [4 Y: P9 a
  Uint32 sample;
3 i& V5 _# b8 f  d% N* c; {3 Q" K
$ _; o' K3 m9 O3 @5 {  sample = input_sample(); // read L + R samples from ADC0 d! c" u! s% B6 k
  output_sample(sample);   // write L + R samples to DAC ; x/ q6 I. V4 Z  `# W7 C" d
  return;
2 z3 I; o0 A- c. [1 X+ [}0 k$ b4 O6 \, B6 [
  d+ c9 J: g: M/ v( D
int main( void )
# i) a4 F3 p5 B% n: Z{) d  n' q9 s3 u) f
. c& _( e1 F7 |6 j) d7 K$ g% H& Z
    /* Initialize BSL */2 j' E+ D. C4 Z8 Y( |$ y  D; @6 m
    EVMC6747_init( );
2 M) n1 I. ]2 @        /* Call evmc6747_intr function */! {- c9 R6 j+ e+ ~5 v' R
    aic3106_init( );
" w- I* {4 {' g5 s8 I5 \  O        while(1);
& a( [4 C% G. U8 X3 _}( V9 k- D( x% ]2 @% ?" x) D
1 }# O1 ~) d& o7 X
! H# f/ F) m. Y/ _- h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: [7 N5 V4 h. M1 A# I4 C" [
/* Initialize MCASP1 */
2 K3 P5 T9 i. o5 I( i% ]8 s    mcasp = &MCASP_MODULE_1;* v) L' s6 S  D3 O$ L9 c
    mcasp->regs->GBLCTL  = 0;       // Reset+ t, w! a; T# e" F7 g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ |7 @2 M3 e/ ]    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 @2 h: x  p+ c6 j$ I    mcasp->regs->PWRDEMU = 1;       // Free-running
5 I- h$ _: B" z/ u; l; W5 r/ J   // configure McASP0 receive registers
/ {3 c" L) k8 F+ V, B' K! v  T3 \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 D5 @/ u0 j; y  N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 i' t) f8 V! ]8 A  ]& d& Q% J+ r! }
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, M6 k9 ?$ Y1 T5 }/ K4 O" A
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: Q; [4 k) b0 F; m* v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); b8 _9 E; J3 Q& ~2 I3 Y  \. k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ d, @1 Q9 Z1 l8 }# Z4 u1 z    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& d9 X0 O: {9 w% X6 G9 A' I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 ~  t, r( T+ {7 Z; s. F" s: F3 S) ?% e: u* [
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. E6 B& X: C# H- z) _8 p  R    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 G5 y, {2 Z! \$ L  \    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& n# l; \6 H& \0 {* t+ \
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 A) H! n: S, G0 w  M5 R4 f% C/ j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- e, ~3 ~3 i: w! h8 f; N    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- g& v7 _- u$ s! m6 e+ e6 B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) j) v% }1 ~1 \& B- Z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: ?+ n- b( L5 l# S+ `
5 Q. U* C5 E. K* W3 Q* s5 S4 q( b
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& X/ x6 p. g( D% n1 e( O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) {5 S. f8 j* [
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, |* y# a: x# ^& Z( ?+ D# Z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 z: |, W) E( W' c
1 T2 {% C' ~6 K* @7 D( r4 _    mcasp->regs->DITCTL     = 0x00000000; // Not used; I' d# M; r7 J2 r
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 ^# a0 ?; }, a, Z' m1 v    mcasp->regs->AMUTE      = 0x00000000; // Not used- x  V8 }' p$ G1 p3 k# S) G8 q

; `! `, u5 i* q( U5 ~) u! J, F/* Starting sections of the McASP*/* F' A% k7 m; P1 D
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  s$ a1 {6 M' x+ Y8 O/ S- e. b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( Z+ _! l' i) \1 w; x    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ j: @0 T, h: w) g! M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" L9 _/ d. j* M$ Z
/ X& @$ }/ s2 k    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 K% K+ b) O. f9 E6 j& Y4 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" n- q6 @* y: F$ C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ j  G2 N* ~  C7 z( {3 ?0 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, a( k5 |5 A, f; \$ ?" E
) i: [1 Q$ P/ H/ Z* T7 ^! W4 @' Y
    mcasp->regs->XSTAT = 0x0000ffff;
$ y7 t; x5 a6 B2 t; e# O- t, f    mcasp->regs->RSTAT = 0x0000ffff; / H$ v3 @9 _$ z4 Q- ?7 n
5 ?4 |. @* @6 @6 g: \! t- T
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) F( h1 v- N' C, f5 q5 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 g: \- B" Z& e; ~$ q+ A+ L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* d9 z  p2 Z% _; W+ K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. C: J- F3 V5 b$ T0 Y
6 Z3 }5 X. ~' G
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* H! T3 {$ {7 I    mcasp->regs->XBUF5 = 0;, {2 W: j9 E# N3 f
    mcasp->regs->RBUF0 = 0;
" L5 u6 g$ D6 c# ]( t( ]/ f0 X) d# B5 w9 N* B1 L6 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 a) A- [4 a: ]* C1 \4 z$ k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; F+ o7 O1 M; f: O6 L: v
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ ]# s, C# v. b5 v' s/ |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 Q; K/ P+ }! z% m* [9 m$ [/ d% P* l. W9 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 c6 P  n& d: A9 \+ F/ ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 |2 s! {* b$ a: M) U5 E/ p! V% T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( w+ Y1 n! A" k$ o. W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. P) l3 y: W0 B3 O# z/ e" v( F
2 D1 K/ d+ v$ K+ @# z    CSR = 0x0000;' B7 d7 n2 Y% `- q0 l+ F* B
    INTC_INTMUX1 = 0x3d;. m7 k5 N4 i5 t
    ISTP = (unsigned int)vectors;
: l% A" N3 _) e- q: |) k    ICR = 0xFFF0;  , L3 n, M1 @  c$ X5 q( ^4 w
    IER |= 0x12;  
- k' d9 @) G8 o2 w, ^" _# z    CSR |= 0x01;  
! Y& N& w$ j4 m7 s4 x
, J2 x# H" w' L( t# l
1 l5 E3 r8 r3 h. D0 |' O5 A; G6 J& N5 L
还有就是两个输入输出函数:  }1 K6 }3 u1 L* `0 u
void output_sample(Int32 out_data)! z/ V$ n! T: X5 }5 _
{
2 K( J* P# u9 G  AIC31_data.uint = out_data;  
9 q7 k2 Q2 x" [  e& d1 Q" d- F  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 X5 @; M. p# A/ ]9 H& |/ y
}/ i+ ~" Y, B! [' G9 k
# h4 _+ F+ ~7 r: E. Z$ a6 R+ H4 o- f
Int32 input_sample(void)1 G' O* k1 Z) R0 ^3 u7 t* F
{  9 ]5 A# h: J  H; Z; J' @% }
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 L7 a7 y2 a4 ^+ h/ x% p6 y+ s( D% M  return (AIC31_data.uint);( d- \' Y3 g2 s$ R, S1 `
}
3 B7 l( v1 @+ L0 ^
7 j% B- V; q7 E5 q8 J: E
分享到:  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-31 11:04 , Processed in 0.044484 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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