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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ @/ q3 V) J* m, g# Kmain文件:: O% t+ d6 i/ t5 O1 Z2 p
interrupt void interrupt4(void)  
1 j* Z2 {/ ^7 _, }7 u% G{
  b2 p; s0 Z$ E( r  Uint32 sample;7 e$ g* H9 W. f! M

: T/ [; U9 w* P% C. e2 ]8 P  sample = input_sample(); // read L + R samples from ADC
) \6 |  _6 M6 h  X9 d9 r  output_sample(sample);   // write L + R samples to DAC   [9 A' L; ]2 T8 ?& _6 I; H. @
  return;8 R( e- q8 [, e, b2 [- n, a
}% ]* Z* T- \) J& y

* u9 |5 }* I0 rint main( void )* |+ E/ G) ^3 g3 [0 k3 {5 [
{
: f; E" y) z) I% Q2 o: e- u
. i7 A9 h& D2 y    /* Initialize BSL */
8 T2 e9 G% [# h# E    EVMC6747_init( );
: e9 ^! f. }$ o        /* Call evmc6747_intr function */, [. P3 Y2 L4 \7 Y" f* t6 {& [
    aic3106_init( );% m, q2 H+ J# i8 ^; z, E% p: M! @# n
        while(1);
7 M4 q! R# l0 g  L}6 L' P$ k& |" L, D

( F) B6 ?2 M6 D) E, Y) g4 s8 _- _1 y5 E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" G4 s' r9 S- }6 `& L/* Initialize MCASP1 */4 Q8 d- @1 P% ~, i( D
    mcasp = &MCASP_MODULE_1;8 q# G' z4 s! V, h# X
    mcasp->regs->GBLCTL  = 0;       // Reset# E1 @8 h! Z- H6 o
    mcasp->regs->RGBLCTL = 0;       // Reset RX! O% J, @3 V) J% ?, _
    mcasp->regs->XGBLCTL = 0;       // Reset TX
' Q8 {, _& z$ {4 U1 L    mcasp->regs->PWRDEMU = 1;       // Free-running
+ q2 w; H4 B- M1 M" a2 H2 ~   // configure McASP0 receive registers$ Z; X; g* L5 w& @; j. n# r( ^& l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 x7 o8 U% A( s4 ^$ [
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 ^8 o, _" ^+ a# r, a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! q% I6 `8 @7 T+ f    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ f9 ^# T5 L- J$ ^& \, B    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 v/ r, d% d- R! j% i8 G, D
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! n; @% m+ m$ L; d4 h3 X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. g" C3 E: p3 D
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& v4 P' n, C% @/ I; b5 u& j
' r) l4 Y* L( L& N8 k$ f/ w
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* {7 N; ?4 Z0 j7 T  @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. N  y  Q1 w# s, r5 z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 S7 C2 ~+ p/ E
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" F- a! G+ r" p
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- g5 o9 b1 f% S5 ~3 B; M9 V
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, S& U& @8 `# M& g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ C* ]: m# x& j3 Y2 {    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& @, {; i) t+ c
; |$ M& D, l- Q1 T4 e% E5 p' O
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# U) p3 x- s7 u  u, _! T: x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' E1 Y( n6 m) J
    mcasp->regs->PFUNC      = 0;          // All MCASPs# [: a/ j( G. T4 Z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# E, k! f4 g0 y& B: _6 O! v3 A

0 [  q. j2 [; H( v    mcasp->regs->DITCTL     = 0x00000000; // Not used; `+ `8 P5 E3 J7 _  O7 @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ _; J& F1 E& e( K! R    mcasp->regs->AMUTE      = 0x00000000; // Not used( D/ R" M' a" Z6 h+ s+ {/ m

2 A- b5 y+ M" i# O/* Starting sections of the McASP*/% ]7 S2 ?/ m0 R0 j
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! ?4 a$ u7 t$ w7 }' V" y2 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - x: O9 r, @6 d, i& U# }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' w7 R( E1 A+ [" _# U; G, L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' m0 a* r; x% V: `8 o+ W: v+ S
! ~3 P8 B0 a$ N0 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 {5 S9 t- C. p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% b  Z1 O. A5 p+ S2 f1 ?6 P5 r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 l: Q! c6 d$ `% m6 E6 i2 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ Y# E/ N- x% g- U2 C0 M0 a" p% O  M4 z1 j/ M
    mcasp->regs->XSTAT = 0x0000ffff;
' G' x+ W+ f2 e: _* F+ |8 ^5 i# E) Y, R    mcasp->regs->RSTAT = 0x0000ffff;
4 B" _/ G& G0 m4 @5 @5 B- r1 l1 Z0 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, P) B" {4 t2 X: a1 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# c$ t4 X1 L  ^3 y, [- m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ K" r: T' _- P5 ~0 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& ^2 t" J8 P; U, i1 d  w7 W, L" o
7 F" T: M: ~# v* P
    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 ]7 ]: v  H& E. X* k; z& c    mcasp->regs->XBUF5 = 0;8 x, F$ H" R4 O7 ]- D# x" m1 `; E
    mcasp->regs->RBUF0 = 0;* r1 U1 Z" E5 H/ |/ @+ V5 n
0 O9 ^7 w( Y1 m' ]# V1 \, E/ ~
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# l$ z' K+ P8 l0 i5 b! l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 d2 h0 i7 L% \- l+ w$ `7 n- L0 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 J- ~* @' j& V; t/ m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 \9 m4 K; C8 ]& B. Q, n
5 B1 @) a  J: b4 e. _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 O4 X5 F" G$ r8 Y6 E. e, t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. F9 T$ q% E6 x, a7 I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! O* ~- h: f* ^. t1 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' i/ [8 r8 ^" T5 G( y0 A. G1 O, k9 ^' P, E3 b
    CSR = 0x0000;* x; H" R% a& w; @! W8 w& Z
    INTC_INTMUX1 = 0x3d;% l4 x- l! g1 g: l" q
    ISTP = (unsigned int)vectors;) J! u8 p! ^/ T9 B4 l9 @1 g
    ICR = 0xFFF0;  
7 Y; n, M7 F/ r2 V; H    IER |= 0x12;  4 V+ N8 w7 C9 a3 E9 V
    CSR |= 0x01;    g$ }( Q4 T, I/ L/ e

% j" Q# r. e6 d6 _# F3 O* x9 U# D+ ?+ D4 x% W( w$ I( W
: k  l$ _( o* V% g; Q) w
还有就是两个输入输出函数:
8 {4 u, `/ G& Lvoid output_sample(Int32 out_data)+ R* \) k7 ]1 c5 J% M/ H
{
0 ~7 ~" g/ P, }/ t  AIC31_data.uint = out_data;  ( s: \2 B; J1 K+ y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 L+ @7 U6 K. p$ w3 w
}! E1 ~% X" a- C' Y$ C& Z7 }
$ K5 w5 |- G& ~$ L( g( g2 N
Int32 input_sample(void)5 x: }' ?* ?4 Q6 w, p
{  
6 w; e, J8 f1 P3 I* A7 _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& p" }' \& B, i; L  return (AIC31_data.uint);  |9 Q$ x/ a9 a
}) Y# E/ L; m- L1 }5 w

& }* g8 E# R+ _! d! f% d. t
分享到:  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-3-14 16:49 , Processed in 0.041823 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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