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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 v5 a# H7 F; t' Dmain文件:
) G& M9 J2 }9 r; J" U4 @: ]; Iinterrupt void interrupt4(void)  8 D% d6 l9 N! M0 B3 N: C
{
% Z8 t" }! m; @& i8 R! x* V6 p  Uint32 sample;8 A& {0 w3 r2 D
! S* u9 @* O. G) h: b7 K
  sample = input_sample(); // read L + R samples from ADC
( |. ]1 `6 G( F4 s  output_sample(sample);   // write L + R samples to DAC . M, W% \3 o% [/ Q" V8 v
  return;. E8 }1 I( b* V1 W  f4 N
}
+ c7 G& H9 H1 F: L, `; g$ Z: m; U& c9 O
int main( void )
- B2 G7 @; x3 d. c  \{
% y1 S2 w1 E: q: h! T7 W5 X" k- E4 y: H
    /* Initialize BSL */
3 }1 X7 G3 m& `" s" K    EVMC6747_init( );! |2 t! K( a5 |
        /* Call evmc6747_intr function */
. \. {5 p1 }. m  Q$ e; @7 e    aic3106_init( );6 ^0 y/ X7 J; X; j  a9 \) c2 C2 n
        while(1);
3 D4 q! j  ^# s# n% h}
  d  A, B$ l( m7 G- L
9 i4 e1 w% X+ [4 K8 D! o- k8 ~, X& @. E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' M! T6 U, l( u; S+ l7 k
/* Initialize MCASP1 */* ?9 c1 B3 ~  ?7 G) [
    mcasp = &MCASP_MODULE_1;
% w4 u* r+ W* B( n8 C    mcasp->regs->GBLCTL  = 0;       // Reset
! z) M, t' z" ?5 z    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 s- J) i1 z8 j0 P    mcasp->regs->XGBLCTL = 0;       // Reset TX- @2 l* A  |6 ^/ ~9 F& h- F) E
    mcasp->regs->PWRDEMU = 1;       // Free-running
# L; A/ P5 y& I* J   // configure McASP0 receive registers
9 J; N+ O' O! c; w# A/ l, v! v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. e- f! d0 d2 E, g2 B; b0 Y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  I# I( M$ Q: x) H5 U# t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, ?$ Q1 ?: s# I  t7 h; \    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# i- [; ]; `  b3 c. L/ s
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( o* F7 i- K' Z" E4 y& }; }
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! f9 q6 E4 c+ j5 p) R1 ?7 |: K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. V/ c$ Q: R) D) \5 P
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: S7 m* X2 {5 [3 `5 ~1 ~

7 k, W2 ~( f% v7 o! E3 b    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  V+ ]; s% W" E) b0 G' b    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; O, Q+ e3 ?7 d1 [6 N( c    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 t; z  T# O6 Q4 |- k8 k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- |' ~+ k  P7 B6 M/ _6 g; ]6 K    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% d, r) P8 X5 b5 k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* p' I/ O5 @2 e    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, V9 z7 B1 u6 `1 K; \6 }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ f7 e4 i  I+ e( k! W0 T
" X5 y* A8 k7 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% f( o4 u) w2 Q/ ]" p
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 [& }4 Z0 \) f7 M/ h
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. L5 _. B/ O7 T7 _0 Q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( r& _$ y. _- m; l" R+ |- f

6 I0 J- Z6 N% G4 `    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 O5 N$ R3 |  ^/ [; F1 F/ M! p    mcasp->regs->DLBCTL     = 0x00000000; // Not used, H: c- K! R* U+ k2 i
    mcasp->regs->AMUTE      = 0x00000000; // Not used# _9 z- v9 Q- C& `. C) i

9 j8 K$ y! j8 K! x$ }# l/* Starting sections of the McASP*/
+ W& x9 S9 L  I  W, Z" [3 [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 |* r5 R. x) |1 d: |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( M' {) T0 y' t( g& M    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 l! z* o9 W! e9 r4 y+ f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 G$ ~: j! ?( s  ~. J- J
+ x# s; P' V- D4 v* \
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: R4 ]9 Z3 }& x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" w' V2 E5 ]9 e' \$ B4 e    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; q! ^5 N; ~$ J" `% @0 U( @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 G( W' t  P( S& K8 J. A' \- e1 k) q2 m* _4 Y& x- H3 n
    mcasp->regs->XSTAT = 0x0000ffff; 4 k; I9 @3 ?8 s$ ]9 j8 ]6 m
    mcasp->regs->RSTAT = 0x0000ffff; # G: l. J; i: K$ s0 w

; t- [7 l* s' F$ H. x2 K    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; o0 w5 a& O3 E6 c! u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: Q  K: J0 X  r' @% Y4 Q6 N8 K. ?    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' o9 a4 l7 K) v" S$ I) q6 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 d4 O5 N/ d: k9 Q; R4 v+ M

8 h& Y6 ?7 d5 Q- X3 B/ M    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 a  O+ c" [, p0 K# \7 {/ Z& x" b+ _    mcasp->regs->XBUF5 = 0;. j2 d  P- \4 ]( A
    mcasp->regs->RBUF0 = 0;
7 _6 G: T# q2 @) `- ~  K& I, Y. n2 j9 q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v% |' x1 y7 K% }+ c) e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# L* S; Q' `$ {4 w. c9 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # v( c8 ^1 S" A" Z9 `! o! H" h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) R, q. c6 y/ y; J9 j4 B: p  z! E' B, W+ W- m0 X0 e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( F3 d  o; s; Z' O  v4 N* |) n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% R: H4 s) B' W5 z% `  r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # q# {! f0 X: C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  W$ S* ?* T* A, @* S$ W* e: X4 B& Q" ~4 X1 c2 z# K+ ^' w
    CSR = 0x0000;) }* u) l" L; u
    INTC_INTMUX1 = 0x3d;0 h9 Z9 I$ {& o" W8 C5 I
    ISTP = (unsigned int)vectors;
5 [$ Q6 W* P7 i: a# ^  k    ICR = 0xFFF0;  , f) U" t# U' A! ?$ M+ ~" I7 E- B
    IER |= 0x12;  
, L, m, ?: [2 T. @  g    CSR |= 0x01;  ! [  D/ V9 c4 h$ z
  E/ j9 I' d  P/ m& r+ b7 C2 i& V
& l3 d$ {* _: a: R" L
+ K7 K- n2 T% o; T5 A0 X# _) r8 _
还有就是两个输入输出函数:
- P  H/ n& k$ kvoid output_sample(Int32 out_data)
+ J, E7 V* X+ ]{
- O0 r# i) F) m& V) y! ?% T  AIC31_data.uint = out_data;  . K  V2 F/ M& n" k4 M9 u3 z/ J
  MCASP1_XBUF5_32BIT = AIC31_data.uint;  E* ~! F3 t) e" ?
}0 K0 y& P& Y7 }4 t

& b( M1 E, P% C' u& qInt32 input_sample(void)
% p, f+ ?6 R# Z4 w7 D3 |9 g- D{    `- Y3 |/ M6 p" d0 y9 b
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, v4 ^$ k+ S+ H  return (AIC31_data.uint);' S9 M: C$ {5 [) I1 p
}; p/ h% d9 c& z6 \: U3 _

; @$ h/ I% ~  u2 ^; J( Y( U
分享到:  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-4 09:43 , Processed in 0.043275 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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