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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 ~! D! D( M4 D7 i4 rmain文件:. ?4 s5 R) N* z  F' z7 K& V
interrupt void interrupt4(void)  
6 ?$ N5 X/ j% }2 R0 s& F' B{6 U3 H" R, S* C! \
  Uint32 sample;
% p' s: t$ o0 L' d4 t8 K: g  A7 U; A, |8 }4 W; B5 _/ {
  sample = input_sample(); // read L + R samples from ADC- e1 ]* E3 c$ {5 X
  output_sample(sample);   // write L + R samples to DAC 0 v( G9 e9 k' {( W8 J* M% M) `
  return;5 a( K6 S' a5 B7 T1 N" a
}: G3 u- \6 I+ x3 d; B- E' M6 j
! a, z. C( H3 V. d+ `/ M
int main( void )
- c  W$ w, ]- u* a- ]) @{1 |. P6 ^' X$ c8 B! Y. |
4 c4 x$ v- x' l1 c- ?* k) C  d
    /* Initialize BSL */: U/ ?2 s4 P) Z# ~4 v& G" z% u5 r3 Q
    EVMC6747_init( );! E, ?2 o$ Y& [
        /* Call evmc6747_intr function */3 t* a7 t* X% j1 z0 v* W5 W! @
    aic3106_init( );
, t) K( w1 N! x$ s8 W8 G        while(1);: I# t0 z, i. |
}! p/ L! p: t; j; p) A

5 J1 o+ y' m* J  c6 T$ f6 _# ^7 |$ n* V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( l: ?4 Q8 m$ z4 x; r8 S& W$ k. a+ }- W/* Initialize MCASP1 */
- G0 o5 D9 @  U, e8 x6 _! z' _, h' o- Z    mcasp = &MCASP_MODULE_1;& ?- m# Z9 n: h
    mcasp->regs->GBLCTL  = 0;       // Reset
7 c' v. z8 M+ O6 y7 t% M    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 R1 O% g& `4 k) Z; A% J5 x    mcasp->regs->XGBLCTL = 0;       // Reset TX
* i6 Z5 e! z' Z( W9 d: D( T9 Y# `    mcasp->regs->PWRDEMU = 1;       // Free-running. ~. W, l$ Q# J* k5 `
   // configure McASP0 receive registers
  t  h6 Y) z! M9 b) @  f1 E6 n    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% b+ q7 i2 {+ o! m* l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ?' g3 l2 S' C3 o7 g' x    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& W6 l2 N1 E7 C4 T6 t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 S4 K2 X- l$ E7 T) W# v+ Y! e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 ~; A" \( o1 E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 j& d0 h8 V- {. B- I" P
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' D7 m7 g+ D# W! T9 T8 R5 y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 r+ V% L& p+ A0 r; \4 c6 W* F( W
& R# N2 @" L( G& @  V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 X& H; M1 s% N0 H9 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" ~& z8 s4 d' C+ o* m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 {# r$ y0 c. j4 B1 _0 `. {) R' Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 j9 z% P0 a) t  F% b    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. H2 W7 \" u7 J) B, g; d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
- d( b) J$ f: B  p4 u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; [: E" {8 U% n" l' a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- T8 \% o& {! A' H6 c9 |0 O) [1 ^2 _  `$ `* a  j! e
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 ~9 J6 A. g4 z$ A/ q, u* E
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 l- d3 ~' W# Q    mcasp->regs->PFUNC      = 0;          // All MCASPs- o: L  J# a; ]" u9 r- S, u1 R- U" h0 ~
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: F5 k" ?* {/ q7 M/ f
2 l8 t, B$ N; V; ?/ o9 Y: y. C
    mcasp->regs->DITCTL     = 0x00000000; // Not used' i) {, i( X" [8 F' N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' ?$ z1 J% u: s2 u    mcasp->regs->AMUTE      = 0x00000000; // Not used
% a+ `% O3 ?' h) W( H( o. {5 v6 A8 Z" D  |) }
/* Starting sections of the McASP*/0 s4 W3 v1 L# v3 f* H
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / o, ~( l- m( \; E. y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 i/ N- y( J8 v, A  A    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 U+ L: y2 Y# G" `2 \4 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 ~! z( O& V+ B$ y1 H& ~/ G& P: j7 s5 j+ h% B/ i
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ g- t, }; _% q: X* M9 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, ~& y) Y% z! W  a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ s" p! |9 T  l6 i! V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  D% [* X6 s5 C( B' U' R7 C/ }
  t$ E% p+ K! O6 C    mcasp->regs->XSTAT = 0x0000ffff;
: A+ m- K4 O. x8 F: g# j2 v$ Z    mcasp->regs->RSTAT = 0x0000ffff; " J$ f3 I- ^# \% B/ \4 F6 ?; s' c& X

- P' P  t& z$ Q. h4 U    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ L" t$ p/ \6 v3 N- [, M4 {  a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* j+ k2 l) d5 b4 [  h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - ]5 }  Z: I* g* \9 s' ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 s7 [* F( D! e3 P( b$ W* B6 I) @+ Y2 C4 M+ S
    /* Write a 0, so that no underrun occurs after releasing the state machine */) o! T  j8 Z" W; T
    mcasp->regs->XBUF5 = 0;
  y! {/ ]. r  Z8 Z, {9 H3 V" m    mcasp->regs->RBUF0 = 0;8 T8 v' d( Y9 o0 l5 g3 f/ K
- ]) [, r9 \4 Z# S  q" s
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, e. N- W  P, b2 y: r" g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 {& i: f# y8 _; {. b3 W0 R" S' y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 a$ f7 k4 I# f2 i3 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! r8 f/ A2 A% S$ Z; ^, l- V
- D0 n4 ]$ h+ D+ A7 ~2 j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 C/ B; U- }2 \" e; c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- Q, N. F" v' m5 N9 N" H
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 m9 ?/ C+ k6 l# B6 U& ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 `7 [8 s! i, R5 X. Y( T4 b  K3 d' s# s5 K  ^; s' Z
    CSR = 0x0000;  p% v, H# ]8 t: l4 ~! {3 v; M, V, V
    INTC_INTMUX1 = 0x3d;  g0 Y8 g/ W: f! z7 D
    ISTP = (unsigned int)vectors;! i) W) |$ {3 W9 P9 t
    ICR = 0xFFF0;  , v7 Z6 }5 I# D
    IER |= 0x12;  
( v3 r* K0 [9 p. A* \    CSR |= 0x01;  0 A. [. O" C5 K4 i6 x) F+ ^

; g( [1 [+ [4 |; |+ X3 e. q, _3 D; D

4 @3 z8 n/ N# d. J& H' x3 E- J还有就是两个输入输出函数:' y9 ]( Q( M) ~, i
void output_sample(Int32 out_data)& W2 p. t% [/ u1 d. \
{9 d3 e  p% c) S" Q9 G2 s; u* k0 _- f
  AIC31_data.uint = out_data;  
+ e1 O' X0 Z8 B; J# n1 Z  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 K, f5 Z% [0 `1 }7 S
}4 {1 s. R! ~: T) S* `3 a2 j

; `6 m3 r% z. X) b2 g9 s* C+ f8 r0 BInt32 input_sample(void)
# n1 z1 D$ l1 J( j  H" H- [# u{  
# s9 |5 F' q$ s6 |. K6 m  AIC31_data.uint = MCASP1_RBUF0_32BIT;* E# @) q7 N; s1 ]
  return (AIC31_data.uint);4 {8 j8 y' k' Z( w7 K' _
}
4 K4 ^* D5 u# [  Z' u3 X8 ?' d4 W* `9 ?3 |1 y9 t+ x, C
分享到:  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-2-1 16:00 , Processed in 0.048235 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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