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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* Y5 `- @# p# H  P8 E! nmain文件:
' ~0 j2 D3 k& x+ K' ?  [interrupt void interrupt4(void)    u7 o9 R! K* \
{4 N: B, u: a( J% q! K) m
  Uint32 sample;
) ^) L9 O* W! @' S! v1 P; A5 E; a. p& ~2 M
  sample = input_sample(); // read L + R samples from ADC
1 M' W  Y5 V: g4 @$ J  R3 C0 p* [  output_sample(sample);   // write L + R samples to DAC + v! r! J, S: x3 h
  return;6 K6 S8 y2 D' P/ C; L
}& F9 p( G, [. B) `$ x: h1 l
1 l9 D# C) Z* a
int main( void )
; ^1 Y5 g4 [7 I4 i5 \- V9 B{
/ |: s- P! R  J% W6 l1 u! O* C" `; L7 _
    /* Initialize BSL */( M9 E! `; l- |. t
    EVMC6747_init( );, ^* O, h3 F, k9 b
        /* Call evmc6747_intr function */
+ K# W3 H  [( v    aic3106_init( );3 X- |' [* S" y9 v( S
        while(1);% u: u% @9 }+ c* F/ J. _3 q
}
  _3 i* ~4 I7 f" I5 n# M. e$ Z- z6 I

0 Y5 g& m! G) x: y# C6 Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* m/ F3 A, b  ]+ d2 z% T: U7 Y4 r0 q/* Initialize MCASP1 */0 h- @& z0 Z0 {+ \; c7 L
    mcasp = &MCASP_MODULE_1;. W) T2 `/ J" @6 T6 ^
    mcasp->regs->GBLCTL  = 0;       // Reset; s: h/ `8 V  r3 o( w  I+ d1 M- t
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 Q2 x, H0 e; u" p9 z  Y    mcasp->regs->XGBLCTL = 0;       // Reset TX0 x6 B, G0 S7 ^9 l! g# h
    mcasp->regs->PWRDEMU = 1;       // Free-running
5 j# S# z2 c! U1 U0 v; \7 j( r   // configure McASP0 receive registers
3 F& ?# W0 ?' L6 I1 I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* n$ O* O1 _8 D
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! ]  r# N4 M5 u# y  R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: c' Z& ?6 d6 B1 y( v5 E, o" R% `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 ^% A+ Z; |" Q3 Q% v7 J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& g# N' @2 v' Q* G" ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 J* P, ^$ e0 M% y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 u# E3 v) ~# P$ ~    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( l1 |/ j! S' O9 u: D

# M7 B; }! D5 q4 Z: p% l7 ?, o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, {7 \5 T; S5 m* j6 R: M# u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# D! l( d. b8 _! |; ?    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 _3 A; \6 v  g' F- N) ?, f( e
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 E$ L6 N7 e$ @) Y* Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 M' u$ r9 |6 D; Q& t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- {4 H/ f- }& k1 M2 J7 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 G  T. k# [$ P- A    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: ?5 u& t. E! A& J4 F0 d* E5 p+ k1 a2 E
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 E! `- q1 W1 O  A! n7 @5 T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 P4 H! u$ ]  K$ R5 i! a    mcasp->regs->PFUNC      = 0;          // All MCASPs* O7 p  S8 {+ C( V! K# \
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& F. P; e6 q- C7 i5 r9 _1 K- D  B
" j+ u; d% A% d- E9 X& w& I  R+ d    mcasp->regs->DITCTL     = 0x00000000; // Not used; W7 h% s, e# R+ _, w2 \/ Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) F! x2 g/ K/ F! D- m. T    mcasp->regs->AMUTE      = 0x00000000; // Not used# {$ o: j' e+ |7 r9 B- j5 ~

* N7 v1 y4 Q1 R* V/* Starting sections of the McASP*// e( S8 r* S' e9 z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   E+ z$ M- x: U  c! Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 I5 t$ n% b+ p1 b    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , o$ a% [2 S2 u5 E8 |  v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  q  V' n4 A# U( y$ D, A% s. E2 S' R5 b7 {* l- {" }' F
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 H; y9 w8 ?0 o$ |, o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 T, u9 L" ^) P9 M% r! I, O    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! y- |3 T5 E6 o2 l: J- ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 T2 I0 N+ u5 u8 D' L  |2 j6 h/ u+ p. a
    mcasp->regs->XSTAT = 0x0000ffff;
7 K7 S5 y2 d# c/ I    mcasp->regs->RSTAT = 0x0000ffff; / \5 U9 i/ g- A2 d/ r' ], l
/ g# Y3 D3 N" B" _4 [  ?' \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 F8 p% w3 C- t. I6 f. y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 T, r7 [4 _. C6 v    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 T9 g9 f. R; u7 `7 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 x. }$ O% G# N6 ]8 S" V; [

: B& J1 J/ O2 U; T% H! g    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 Q6 A( r+ ~0 ]. j4 I    mcasp->regs->XBUF5 = 0;
/ ~1 L, J8 E1 {5 K9 F( X, b4 I    mcasp->regs->RBUF0 = 0;
% Z; h$ T; K8 l6 a  o% B
+ a: x! E% ?  t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : J0 h, g/ Q' M% ^8 z  V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% U" `; O# o$ F& T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 E/ M/ L. r1 n7 O# t6 v4 Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 p8 G9 v6 r  r. u
1 f& e9 T% ]0 f5 _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + [$ U) o* I9 N% E7 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" j1 d3 I) K$ I$ H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% C6 e- R* W$ C+ o6 s/ `, c! ?1 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 S6 Z  T! o* |7 R6 C( [* w# a+ }' r/ p
    CSR = 0x0000;
0 r1 y  |6 l( i, P% v; I8 h    INTC_INTMUX1 = 0x3d;
: i! [( [( e  g: F3 H    ISTP = (unsigned int)vectors;' v& J. X& W# J" u4 E0 g2 G; n4 q
    ICR = 0xFFF0;  
, w) y8 \) i0 X1 W4 o3 j3 c    IER |= 0x12;  / j0 F  j! s8 e4 u( v+ s
    CSR |= 0x01;  8 V; k; z# [, i' u
5 H5 c; j, W3 f$ O

7 D: O; J3 _4 N4 g
' N) P: i( \2 v* I/ x还有就是两个输入输出函数:
! R) ^- e! z7 x" Qvoid output_sample(Int32 out_data)/ J! C+ K  f3 t! z' ?2 U
{: \. c5 m- H, D7 q% c
  AIC31_data.uint = out_data;  ' b8 E7 O1 t. Z$ q" l2 b6 ~/ {0 l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;& t6 c! x; t0 g3 x) b
}
) w% d1 d4 k# g- e8 X. w4 _: D/ L! z0 |/ g  C- Y/ m8 z: S  G% J- q
Int32 input_sample(void)
0 G' @3 R, _! e8 h5 b{  : z5 g% @& r/ K& X2 Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# v9 N2 ?! V, x
  return (AIC31_data.uint);, v0 @" G' }3 a8 E% h
}
* A* f; w2 ~3 U' B5 l0 s
8 B7 r2 _" q' ^
分享到:  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-20 20:05 , Processed in 0.042035 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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