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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) E) S  \1 k0 V
main文件:- J1 v' `  D0 y
interrupt void interrupt4(void)  
5 L* r7 b# G& d- ^0 ?- d  h5 ^{
& q. b" K8 I( @: |8 E  Uint32 sample;
) ?" W5 h$ W) L7 W! Y/ ~
  `. D; e) i+ h( W& L/ O. @  sample = input_sample(); // read L + R samples from ADC$ Y0 y  a  @, K+ _# L
  output_sample(sample);   // write L + R samples to DAC - Q* c* l0 U+ G, u$ c/ M" q
  return;
% k7 P) f$ [+ g- R# Y8 G}: I7 ^% L* \  V, t$ C0 |5 D
. o, J* p7 ]- ^0 O! C7 l% V
int main( void )
" n$ k! i9 Y$ w  a, r7 A{
5 v: g8 u0 X& W; r. p3 m* y& F. ]8 D
( J( x* L# `$ J    /* Initialize BSL */$ Y1 _, s" c! R2 ~) F- q) \
    EVMC6747_init( );6 }' p# O! s- a& }2 i' x: x
        /* Call evmc6747_intr function */9 H: ^# P, M9 n
    aic3106_init( );% H: V* n- M8 r! \( L1 E# |9 j
        while(1);8 d4 x* G8 Z, a# W4 s$ p/ ^6 R
}6 W) `/ V, p! [) d7 ^
; U) @) c6 y! ~" d1 Q2 f5 B
7 {4 g8 @* |# ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# j' G6 |3 v6 v; M( T7 `/* Initialize MCASP1 */3 o% Y& L; j- |1 P
    mcasp = &MCASP_MODULE_1;8 U! R7 G2 _% [7 }
    mcasp->regs->GBLCTL  = 0;       // Reset+ x. L; [: k. ^( p% ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX
& u7 N- O7 i$ V+ A8 D$ Y    mcasp->regs->XGBLCTL = 0;       // Reset TX
! C8 ]5 }) u1 O! Z) Q    mcasp->regs->PWRDEMU = 1;       // Free-running
3 x' t/ @$ }% K* s7 Y* ^& M8 \0 Y) A   // configure McASP0 receive registers+ _! n& I& A# ~2 m# }: ^( D
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. Y5 u3 I% g1 W3 z( a
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& V1 G  L6 g7 ~+ o7 [
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: A$ V3 H! y6 K- a$ K+ I/ C/ |% c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, {2 P2 ]# u* ]  T5 w6 {    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 P/ F+ o! `: R2 |  d: }, Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* I7 s6 L6 r$ i: O7 ~0 U    mcasp->regs->RINTCTL    = 0x00000000; // Not used' z0 n' ^1 Y6 n7 p8 `$ K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 _9 N- \4 m9 D0 A# J

. ~% O# y7 L$ C7 `( b    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 s8 b, w% x6 Z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 \  I* n" ^: ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' q0 @  x0 h5 A1 z/ G7 z' \9 B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* X0 a' s& Z, j% r' X( Y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( t( |4 ^7 ?/ g/ ]2 {8 K
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; ?; C/ B0 ~3 L' W' y4 V4 p& D
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 \4 ]- J) \  P8 D- ]/ w3 G/ T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 C  k, B* C7 m) u/ D: G9 y

; S$ e& [. U) ]+ E  r, R) ~: p    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  X  f- f7 ?- A' p( ?7 r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. V& b. l3 H* V6 v    mcasp->regs->PFUNC      = 0;          // All MCASPs5 v+ ^( q- p! g5 b4 S- S) t; H
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 g/ V7 K# _/ i5 b7 K' e; j+ E) h! X) e7 A; |2 X- P
    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 H$ H: v7 B" k4 D8 F3 x    mcasp->regs->DLBCTL     = 0x00000000; // Not used& ?/ w) r+ I9 n; h9 D$ w) y; e
    mcasp->regs->AMUTE      = 0x00000000; // Not used! D! _* n- H0 ^% E7 j
2 s5 S1 a1 k6 x: d- T8 X
/* Starting sections of the McASP*/8 U5 z  z( G1 M$ K& G) f! [! l
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 h1 T& |+ l" d. m9 a2 U. M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! x* [0 e2 e1 w  s; Y8 }    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & v$ Y4 U) H0 u( M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: V1 s4 f; p5 H1 Z' a7 g+ f

4 D9 Y# i+ V8 J3 B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @" q# a- c. a$ P$ k( e' c* \' w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) W4 l( s+ H& }; t" e1 w( {: X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 i6 _  L# R1 U0 b7 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 t5 _4 Y3 k+ N6 |4 h& y" p
- A$ d% A1 `% U2 j$ A
    mcasp->regs->XSTAT = 0x0000ffff;
, C+ k1 o# O: Q    mcasp->regs->RSTAT = 0x0000ffff;
% B7 T. y0 V7 y; r3 N' a( @( v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. n1 }8 ?- _9 o4 }% D9 u) a$ J" H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ `! D: e6 p" Q+ e" K* J    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! u/ ^2 ?- `2 B) ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% C/ @6 Q3 Y+ T& \5 c& R

. r) n) z* K# Q4 t% ~$ n$ g1 {    /* Write a 0, so that no underrun occurs after releasing the state machine */# C9 z- O* }; W5 q6 X
    mcasp->regs->XBUF5 = 0;
2 G6 v4 t4 u" F' a' b# N$ d    mcasp->regs->RBUF0 = 0;5 E: F9 [. }5 F, ~+ T! M% g

2 |) B7 {7 p, r( ^" O. P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! j5 \+ b6 |' ~4 O3 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 P% e9 \: G$ q4 c4 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* w' B) p. D) i* ^1 J5 z* A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" {8 t8 W2 I( w# n( c
: X  l+ a* X1 t, Q0 b3 q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , s) l1 c7 l& i; v  z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, e! J( g2 U8 R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * _- Z9 Z) ?, _! W) i6 d8 i4 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% m" ~- h4 i& l$ ^7 y
8 J, m! ?0 [2 ~$ \8 _( P
    CSR = 0x0000;; h8 x- J/ l0 L: f, G
    INTC_INTMUX1 = 0x3d;
  R# E4 _4 q1 K9 j1 J    ISTP = (unsigned int)vectors;; h# w* i2 u# D) r$ t
    ICR = 0xFFF0;  
, W( q1 j8 K# T( q; [9 Q9 Z" ?2 s, g    IER |= 0x12;  
% k0 k  z7 z+ J: u* m    CSR |= 0x01;  
1 R2 R6 [5 E- q9 o9 t- V' e+ r3 e1 k% J7 A  C# H3 [
) _* G* e% h/ @- p# k" m1 r

2 g# X  i3 T6 s' O还有就是两个输入输出函数:
$ ~3 _: \$ r7 b4 r5 P( b+ ~0 l& _void output_sample(Int32 out_data)5 W" I5 S* _! N( i8 E
{9 e: ^$ b' ]* P1 r' t; q  v
  AIC31_data.uint = out_data;  
- T/ c$ K+ c9 s9 ?( T" `6 `. n  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 A3 e2 l- A: ?; B6 ~}6 v( W, H/ s' p5 L" j# v7 ?, u
4 T; G! Q( b" |4 p( V
Int32 input_sample(void)
9 r8 u- {% L" Y5 s# G{  
' j* l5 u+ M2 j+ F  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 Z6 Y$ J5 h  n4 }! f  return (AIC31_data.uint);
& s0 c9 s8 V5 p; s6 ^}9 n* W1 k0 X% N, A9 G7 M
6 O1 b+ j- X' o  b% ?6 O
分享到:  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-12-12 00:04 , Processed in 0.037250 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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