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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 S5 J. |. C4 U% i* ^. Omain文件:
: G& Y2 |6 s4 y4 u. ~interrupt void interrupt4(void)  
0 x9 T1 H% K/ B1 O{
) I& C' |$ z1 f  Uint32 sample;8 n5 m: j' Y5 z2 N1 q3 F8 c9 G: |
+ Z5 J5 m" g0 K+ S
  sample = input_sample(); // read L + R samples from ADC1 b9 T: D, e2 A, j( d
  output_sample(sample);   // write L + R samples to DAC ' T& c7 o  ]: X
  return;% Q# t; Y3 g+ x& J4 g& z5 Z8 Y- r* J
}8 b4 F; B* w- Q4 v* D, `% x# Z
3 X& e7 p. g6 c
int main( void )
# \8 `1 j4 K4 u7 H& k; m+ }: L{
9 W3 w  P. F) X1 f( l  t* [7 Y
4 ]$ R' }) Q% o4 `. p    /* Initialize BSL */& q, X/ F8 A2 z" B  P  n4 W
    EVMC6747_init( );
$ ]9 Q* {2 X' @        /* Call evmc6747_intr function */
- U1 I" B' r9 V% A$ S' S    aic3106_init( );% j( ^% j( O% n* g4 _; E4 L" Z
        while(1);
3 m* d3 @7 b" W' S( ^, f}" ^# z# |% `( Z; u" n
5 w" Z' w  y1 r- Y& k) N, J
7 Q% \1 e% @4 ]* P. {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 }  D+ U+ o$ I& m$ `$ _+ e
/* Initialize MCASP1 */1 r+ I3 T% F" I4 q( m
    mcasp = &MCASP_MODULE_1;0 K$ p  V5 @: E  A+ [3 B
    mcasp->regs->GBLCTL  = 0;       // Reset! d" {% W( B8 r$ f
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 W4 B3 K* u" h, ?
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  u- u- W6 q) ^4 {4 K5 \    mcasp->regs->PWRDEMU = 1;       // Free-running
/ b! H5 v7 B7 y' t0 {: ]: G  f   // configure McASP0 receive registers
3 k2 @6 U" Q4 \' m: z" Q% y7 w. ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" s& H! {4 V: Z2 O, Q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 _9 y; J0 n1 d% H  I# ^. ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 t# ?2 O1 ?3 U* j/ r6 |- @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 J& N2 i! ?( c. l# Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" F  T  J5 B* H: K- O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ u& J1 Q8 \" Z. B* b+ B8 @* k    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# w7 U) t( y% E. Y1 i$ y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 D2 D3 X4 r* k2 b0 n5 T7 ]
' `0 h2 @9 Y3 x0 J    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 x, I- [/ X; k4 s& @$ t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% G7 ]# q' a2 z. O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 d( \! N$ x9 A, c& b9 l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 @0 j/ g! _- w# q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 q4 l  [! N2 q2 [' v8 z, A    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 j& ]3 o  S) i8 i9 n
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. \! k* B& a1 x9 K3 }& \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! d4 m, k, e2 Q! x* K
" c& L6 P3 f* N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN8 H7 [+ m2 L0 ~$ h$ `0 C% d4 z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# ]; Q4 n' G5 c4 P& {( T7 f1 `    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ v5 O% n' x: F& ]  K1 G3 D* ?0 O    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% u+ {/ G; a4 N. H* Z
6 g+ g( H  I' _+ m% U/ c/ x
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% }0 B( H" F) S    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ I* v4 d% e8 T+ y2 e' I5 x    mcasp->regs->AMUTE      = 0x00000000; // Not used2 h5 |1 G  }" l: }: t: t# j

9 Y( s4 @5 U9 _) |" O/* Starting sections of the McASP*/
2 v$ @* t, s, W8 v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , n7 T  V7 g( c0 H1 a2 z  ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: R! Y/ }, ~% H: D6 P& I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & N% H% q- [9 q% f; [4 ]& P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( L! o6 P& f9 U. s4 }3 D) X
6 [9 S: N+ |. u; v! x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 ^6 N( ]7 i3 @  M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 Z7 a3 b# C- M9 j3 F7 \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G6 n. O. Q2 B# X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( O* r) }8 n' \1 U% l( \0 Z
5 C" Y& b& r6 A: @    mcasp->regs->XSTAT = 0x0000ffff; * N, M2 K* ^  ^2 g" r0 b
    mcasp->regs->RSTAT = 0x0000ffff; & u& P3 _' x& N- j

* e' m6 q0 d9 |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) H9 z, z; {: K1 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 ]9 i" I3 w  g$ x& L# c    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( n- _& J4 \5 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) z) Z; A1 l3 \+ n7 z  l6 X
) r; ?$ F, K8 W7 r8 i    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 W5 @- ~/ V8 L! \0 \* r7 {    mcasp->regs->XBUF5 = 0;: O4 G0 `$ E  t- q
    mcasp->regs->RBUF0 = 0;" z4 `/ x' R) H
  y/ @2 r- N& t. ?- j
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 G+ `& D2 X* d) S2 D) z7 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) _0 i3 i" E# [; K' w2 O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 g; q- T2 H0 Q; B# J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- f5 T7 }% g8 U, \( v
0 T$ R% E2 y, h8 ]8 j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( k  T+ E- L2 D6 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% [9 a' v5 f: X5 v! @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* `; U2 ~5 k+ H6 ]6 ~2 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; ^7 g8 f% e  n1 Z' f) i$ M
2 _; g7 k2 O& s. i! \; }
    CSR = 0x0000;! y. `( ~9 B1 G! V0 E- C. \+ }
    INTC_INTMUX1 = 0x3d;
$ e0 W6 |% v! a! w8 S    ISTP = (unsigned int)vectors;: M1 E; I1 ^8 j3 s) R& I- ~$ T5 ^
    ICR = 0xFFF0;  
! a- k; H/ R. `" ^7 ]    IER |= 0x12;  ' i7 B+ p0 {2 i  Y% Y: X' V2 `
    CSR |= 0x01;  
2 a, h3 r" c' ?9 u' _
) K- n( f0 d1 R' w0 Q
- w' O1 W9 x, J; t2 D, m" a  h8 O6 }6 l9 ~2 z1 W$ B
还有就是两个输入输出函数:3 N  c# I* t: R' G7 `+ N) ^
void output_sample(Int32 out_data)
6 f& v1 i1 n6 Y; u0 l{
$ N4 F8 ?8 Z# E4 ~  AIC31_data.uint = out_data;  
7 H; u- s! b0 g9 k9 R: {6 X  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 e4 r; h) @. T! }  Z! I/ J" u}
' A: i" [4 E3 ~3 h
/ {* n, f5 H* D9 _Int32 input_sample(void)
& i" `" O$ d7 |$ h4 V{  
( ~9 l* R2 h- V+ X. d  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ D- B7 I- C4 n: x
  return (AIC31_data.uint);: U/ h# k+ n' ~# Y+ j% W6 Y
}: M0 _- G3 C; |
- J7 B& F  v% H, c+ e! n- J0 |
分享到:  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, 2025-12-4 04:22 , Processed in 0.045061 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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