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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ @, W- J% A5 E4 A
main文件:) c' ]% G% `5 Q; H& n
interrupt void interrupt4(void)  9 o- @8 x5 B/ u$ O+ a6 _+ A( e1 c: P
{
; p6 V  ]  e* q: a  Uint32 sample;
' B( Y7 M" `8 w8 o8 E  P% C5 o* _5 T" ~5 k. i, b
  sample = input_sample(); // read L + R samples from ADC
3 W& j3 z% x, \6 O$ T  output_sample(sample);   // write L + R samples to DAC % l6 o9 h. a8 v/ [
  return;
- z/ `+ L9 C* k" ?* L}7 A: b5 e- b: W4 D5 c4 k; z* t

$ I/ I( H# ^2 a+ S5 @5 \int main( void )# n* @! Z5 c/ o: p9 k  w
{: f" m1 z2 L+ e; T9 e  F, J

8 Q6 P# t( a" d1 M    /* Initialize BSL */
* ^- M; w  m, j    EVMC6747_init( );
6 S- v- M" ?3 i! M3 ?4 W        /* Call evmc6747_intr function */" ^- x9 ~% O9 p# I$ T/ G
    aic3106_init( );/ l. K7 H1 Y2 I0 O: o9 V
        while(1);
; a7 \8 c; Y2 V* Z}
9 l6 k4 k/ y& q& \5 |* J
2 ~8 s: D2 S: M, |5 l+ X9 M1 y& Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 ^7 Z$ q! ]0 ^; h4 s7 q/* Initialize MCASP1 */+ D, {5 F+ a! L! P- [: {( I$ {
    mcasp = &MCASP_MODULE_1;
4 n1 Z2 f; E$ e3 Y* {# S    mcasp->regs->GBLCTL  = 0;       // Reset1 u: l& _0 C2 m; C! S, ?, X
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" j, k9 d6 @% R  B$ H    mcasp->regs->XGBLCTL = 0;       // Reset TX
! D3 X. C/ N% O    mcasp->regs->PWRDEMU = 1;       // Free-running
: F6 U* U3 E$ x  ]- i/ Q0 V   // configure McASP0 receive registers
9 @& _6 s4 I( s* Z6 |    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% r% r+ ?( a* a% v! A& s
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* @' v- I% r- r4 i$ J$ M    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ c% s* o6 y, v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ W6 q1 R, ^8 @' F    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" ~( b/ q4 z1 M    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
" ^* S3 r# r  `  [  {7 Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) U  [( |! D6 L2 v  d    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, z2 x; G! u! i. s

/ I- K$ a5 D% ^# f' B# P    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. R+ ]' I4 Q4 }. @# `' T. b  ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 W$ A4 O1 n3 x7 u% A  z; o. }% R) E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 x! x. Z5 G6 o1 h1 h/ i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# _0 r" m0 J/ H. L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 G. ^0 k  O" H3 \4 E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 e: J2 q) v8 |) ]/ Z. U+ w6 o    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
  Z3 t/ R3 k& V5 c# b8 Z% M8 H4 K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% J4 \: J' r4 S7 J/ @& _; q4 [+ x
; w( F, c, Z! i9 q7 @
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  O/ u% i& ^/ T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, |$ X( U3 o8 o* V7 m$ E    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 m: X1 [3 O( S8 [: T8 _    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 H9 @* l, |/ g+ i  \' t3 y

/ O$ X+ g2 O  ^  S% [) @& x* A    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ ~3 x& y4 f# `- ~    mcasp->regs->DLBCTL     = 0x00000000; // Not used# J4 q+ F2 N5 u' M  e, T4 I
    mcasp->regs->AMUTE      = 0x00000000; // Not used3 h6 t5 l# P: D4 D9 O1 N
" j2 u" L3 D- m/ O8 l3 N' E
/* Starting sections of the McASP*/! F$ _' ?. c& r, F; l) }
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 ~1 F7 p; j7 S# [" D& l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " W3 H, @' W9 h/ B! u) T
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 q4 e( n9 J1 g7 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 h0 J: U' x. ~
, Z! N" ^; q8 [5 m: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! `- I& K) D# p9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ J" i& j. p( a4 \    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" t5 U. n" @3 S; I& D+ W5 i& [" \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, X3 ]2 _+ f, I% P( G  o8 }0 _$ |. Y- S/ J: {0 I
    mcasp->regs->XSTAT = 0x0000ffff; * W6 H/ Y' ]8 B% w' ?$ w3 `* V
    mcasp->regs->RSTAT = 0x0000ffff; 2 n# j/ V9 l3 N4 Q( X: |# X
, Z9 U1 z3 t+ M. k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 j$ U0 f' y$ Y6 z( _( w- N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );  C5 G1 n% {9 A( v9 V3 S# W4 G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 c  u( Z  X* F6 L$ ^% O, c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 ]6 w  F; w6 c, M1 f- B
- m( m% |; U- F' `! K" `& Q
    /* Write a 0, so that no underrun occurs after releasing the state machine */- s* b: \* r& \/ h% ~1 n! {( V
    mcasp->regs->XBUF5 = 0;7 H& W3 ~7 w2 Q( U
    mcasp->regs->RBUF0 = 0;
# ^( T$ `$ h# U6 Z
/ g3 @3 P4 @2 D. ~    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x; L. e  E, M& ~( z) z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 u( G2 `: X2 N$ K; V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ ^# ~. S" O1 a7 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% N* n: p5 ^+ @
, t. {. w5 P- F7 U1 m- L    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! @: v+ d9 A0 }% r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, M- `' `& f! y& J/ ^& u    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' J$ w9 K. J' E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- _% S/ y! x9 t* w3 }: X4 d
& ~! B& s. ?7 P' C' o+ v% N    CSR = 0x0000;
; T  \8 u/ A$ I. p4 H+ J    INTC_INTMUX1 = 0x3d;
. o  ~7 T4 O2 H* k8 ^5 F) O% b    ISTP = (unsigned int)vectors;
; H# u' U; d; }5 U( Z7 h$ J    ICR = 0xFFF0;  + T/ V& C* d/ W
    IER |= 0x12;  
* `0 s4 T0 Y; E  J    CSR |= 0x01;  & _; I3 |, E# U" ]: F" r5 ~2 ]9 E" X
" l7 s' ~* P' n

& X+ V, ^9 T( ]* w8 p- ?
+ X7 K& d8 J' t还有就是两个输入输出函数:9 B7 V* y; U4 X$ t( |, t( p
void output_sample(Int32 out_data)0 r& _0 M4 b0 m$ a! e3 ]
{" u  G$ z+ s/ k) X6 J0 I
  AIC31_data.uint = out_data;  7 @+ n: L* K9 X2 `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" p" x) i0 w0 w  O4 W" O}4 ^& d. e# Q4 G( @8 H5 h

1 N3 x/ P2 o. N$ j. Q' j1 [7 JInt32 input_sample(void)
( U5 W# A- a- ^$ x, f{    M+ \( Y9 n2 Z; r$ I% ?' D7 @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 G. H$ _' a  x5 e$ p/ V
  return (AIC31_data.uint);$ q0 M; m. N3 r' k9 V
}) w1 x2 I$ x8 O, p2 M' k/ b) s" U8 f$ |

! D- p1 `% J# k( |3 ?: X# T! J
分享到:  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-11 09:16 , Processed in 0.038487 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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