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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 L' g% N$ H9 z% Q6 k
main文件:
* x0 @+ {1 ?+ m7 m5 I' dinterrupt void interrupt4(void)  / o0 @+ E5 \% I' s* |/ f
{
5 W  O0 Y$ C  L- Z  Uint32 sample;
8 K- B3 |! D8 f( i
. _' C% b8 h) V- y  sample = input_sample(); // read L + R samples from ADC
7 h2 K, d& G: q' H% I  output_sample(sample);   // write L + R samples to DAC 0 {3 b. e3 `4 h4 M- z
  return;
( p) Q$ X8 B; G: a}
0 _7 u4 M6 t2 T
  T" U) \0 a+ [7 c1 X+ E, hint main( void )- h1 w6 M+ D8 @6 m- I  k7 ]
{% M$ _8 ]5 a$ `  {4 p
0 m$ l3 @9 `. v  l
    /* Initialize BSL */
; ]7 S. A0 E- Q2 t1 k    EVMC6747_init( );* P3 Y6 d1 o( {# J8 [
        /* Call evmc6747_intr function */
1 f: d6 l4 Y: a! `  S; B    aic3106_init( );
/ }" V. G4 a9 D7 s6 F, u        while(1);
- a  M. B4 c0 K: s' E9 x$ i}' ]' u& \' q# H. r
4 x) j# F, D  S( A0 e/ ]3 Z

; c$ e6 |& g) }. f7 Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 W/ s6 M: [# C  d/* Initialize MCASP1 */2 y* x- D# v1 r" X7 {# ]
    mcasp = &MCASP_MODULE_1;9 ^! N# @' A7 k3 \+ A- B% T
    mcasp->regs->GBLCTL  = 0;       // Reset
% `( l% Q: E8 ?. l- o    mcasp->regs->RGBLCTL = 0;       // Reset RX$ Z1 }! G1 q7 f6 r% v  N# `  @
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- x. U5 l5 k8 V# m6 b    mcasp->regs->PWRDEMU = 1;       // Free-running
( {% v4 c+ \, F% M& g   // configure McASP0 receive registers% Q, X, B& i5 }3 ~7 Y' L" x" [4 g
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' E, e% E# ?" b6 B# O    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 j- y, S1 n. }0 L+ k; u6 Q; Z& O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' O, u8 w+ b, M* \' \7 T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# K* }4 Y; W' o  p& n& p$ U+ V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): o# I( O. R4 d# _5 V
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 j$ }3 K6 R) H: I& d" Z    mcasp->regs->RINTCTL    = 0x00000000; // Not used% ~. V* o* k0 q7 c! |3 F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% I+ E: I$ h" |' X. N- w7 U- s1 B, t# q7 K. B( `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ m) Y# ^5 e; j) |    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 {/ p& e4 D& Z: Z% ]  I    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. c7 v9 _' ?) T/ ?  j
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! }+ M% s4 a( w/ ~* o    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK8 ^* w# g# f8 s) h7 v
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ ^  I% N. s, z) p
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# s  M* V5 e; O* r$ L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( ]/ G3 V, t, v# Q# ]
9 Q+ u7 ^$ U) L! I    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* _4 Y5 i% @4 o* R' c    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( z5 E8 s, j) n
    mcasp->regs->PFUNC      = 0;          // All MCASPs( E7 g6 \, g+ r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 h  B. m. X; L# T2 ?4 @: ]
$ Z- \* ~. Q9 j8 [% _0 Q6 T    mcasp->regs->DITCTL     = 0x00000000; // Not used8 b5 W& c2 ~& y2 t( \1 u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 d4 k6 ^( y: O+ B    mcasp->regs->AMUTE      = 0x00000000; // Not used, ?: F1 S: v# a$ M

. d! x9 k( Q; ~" C/* Starting sections of the McASP*/
. j& n. b: o9 y" D" v* q/ ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , Q; s" T8 a4 a, @) S. l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 @" U& o8 c; Z( m8 ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . |8 p* I. [$ t' K$ ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% f6 f1 [6 X; }5 Z8 s) K
6 w; c! y$ S9 E* }1 z' X4 G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   E' W* r: ^+ |! j0 d# y( V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( k$ L+ f( o$ N& o4 M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- i9 h/ ?  \* ?4 ^0 E# {; E6 w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. r$ q* ~) Q4 A) B3 ^* G7 {4 V: _& |' C
    mcasp->regs->XSTAT = 0x0000ffff; 5 ~4 y/ b- X/ S' x8 m0 ^/ I
    mcasp->regs->RSTAT = 0x0000ffff;
* ?6 u4 X# A& t  h8 n. [# h$ F/ |1 c% f: p& n5 r6 I3 {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; A$ ?; L9 y* I" m' M" W& g6 k0 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 x/ Z+ U5 Z# x9 x& s2 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 `7 ]9 K" N+ z; O# R$ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& ~, _3 G5 b+ t3 `/ i1 ^9 u! s" M; G. l4 }# z# i; ]8 p! }$ s
    /* Write a 0, so that no underrun occurs after releasing the state machine *// g* E2 e) B% B" e2 u0 u
    mcasp->regs->XBUF5 = 0;
0 Y1 V. H. ?) U6 N    mcasp->regs->RBUF0 = 0;9 L# c, k7 W1 `1 ]' b
, i/ b/ w& E3 q  _0 R
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# `1 {) V. s7 o1 l" ~* E' @" |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 X, ], f" c) A& S6 `' |$ C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! a! F- E$ \# J# G3 @/ V* ?5 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# t4 A, I6 i, D3 h, n" M# Z! a2 X' D
- \) ~$ D& D* i( M( f/ ]* e1 ^- @    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 N, v/ H8 m6 ^* h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- ^" h! S1 w- F1 u! j4 V' |0 B. F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" T2 q- P0 c/ x) q/ Y% j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 i  o; M5 `; U. E& d% D: b
6 S, f! T( o. \6 w( C
    CSR = 0x0000;5 y- k0 e9 a7 @6 w) H
    INTC_INTMUX1 = 0x3d;
! S9 {. W$ D8 R/ m; H    ISTP = (unsigned int)vectors;
' ?0 ~/ s8 D( F3 c( U    ICR = 0xFFF0;  + X* E$ D4 Q0 J9 o! v- ^
    IER |= 0x12;  
5 b) F; y, \& u- C    CSR |= 0x01;  
: G0 p4 D# p# e8 m4 ^- a( C2 |. T0 D3 b% b* ~1 ]; N! z, g4 w

6 F% f) \7 i: z7 v6 Q
( c  p% Q5 @7 l& I# A% N还有就是两个输入输出函数:; m- `" G; V4 \% k$ ^
void output_sample(Int32 out_data)
4 ^  A" l6 h9 c- t3 ~{/ V/ [  M* Z6 \- h
  AIC31_data.uint = out_data;  7 s; Y( t( \9 q' D* }* y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 ]# }/ C  n; [+ h- z0 s
}. ^; ]3 G) F' _4 J, ~" j' N% _
( J# K+ Q2 Y+ @
Int32 input_sample(void)
8 _- t2 N7 s. \' [* R1 p{  4 Q% l2 L, |4 E) M" N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* ]2 n, O/ q! T3 H% D0 t. _  return (AIC31_data.uint);
& U. S) i( _( l/ ?. ~0 }: [; A}
* z6 M& d) w4 T% m+ F  k0 u
6 X  T% r8 ^6 s0 k) c9 @* ?
分享到:  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-11-19 17:58 , Processed in 0.037441 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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