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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. S( _0 {2 [! L% n
main文件:; y0 _2 ^7 f( j" }0 D& P: u/ V
interrupt void interrupt4(void)  
2 C2 s, y- [% l{; D# s5 Y- l' A* Y/ K
  Uint32 sample;
2 z; k4 t0 o# t$ E/ L9 B4 {9 E
7 ?2 D" B3 V: q& @8 `  sample = input_sample(); // read L + R samples from ADC
; S  p5 x& ]% b/ ^0 c! p: B3 k/ z  output_sample(sample);   // write L + R samples to DAC   Y9 Q. p3 }) F9 F/ I% Y+ j9 ~  i. @
  return;2 s8 l* X* I) S3 W
}# g! L- J; p% J( Q; D

6 K  @8 T3 C9 _. eint main( void )- Y4 b9 G5 M- h- q$ E
{
/ s8 S0 l: b6 A' E2 w" E& M# s, _+ p) H, A" e9 h1 \+ B
    /* Initialize BSL */& I% R+ x' Z7 k
    EVMC6747_init( );
/ e% ~3 C  Y# ?; l( N        /* Call evmc6747_intr function */
1 }( Q( H% z$ U    aic3106_init( );
6 e* |( {" {0 H% f5 n; H        while(1);8 B8 U/ {! ?6 i$ G9 ~; M
}# r' s' p. E* s" Q4 u" ~
/ S/ v6 |! B4 c& V6 i

. ^( z( N" {5 V: Q% v# vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ x! X2 X1 c+ M5 S0 p
/* Initialize MCASP1 */
5 G% e, L( J: j9 d, u- X! B    mcasp = &MCASP_MODULE_1;9 `% L* p" F( z# N$ l$ U; X' n  @
    mcasp->regs->GBLCTL  = 0;       // Reset6 r, k2 Y& F& K0 G
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 ^) _5 N6 r# y  t    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 l) w' v+ {! b2 h# L0 x% \    mcasp->regs->PWRDEMU = 1;       // Free-running6 @% s$ ~8 g- q7 t- g3 {1 i
   // configure McASP0 receive registers7 a- S% a& }% T3 ~0 d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 z5 F: m+ t( T* f, J1 Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! H( T4 |# M# H) U5 d, P! Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ I1 [, ^0 U' N4 z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 L1 t! Q9 F4 a( C, ]* _5 ]% c8 M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 i* d9 W2 z/ [/ e, p  m, _
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  R" B3 B. S# O: l, u' T* {0 u
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 X* V9 e- X; S! D  b/ i/ y# P    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 Q6 P2 @, y. H5 j. h! j8 `
; Z/ m3 c3 e$ H& D) Y8 p4 z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 M" T3 U. ?7 F0 n  i9 r* O' t% [3 |: x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 u' D' H9 b- b* b
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# A: |3 Q) E4 u! L6 A2 \    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% }# e6 V9 v, V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 B  t; G- V9 |& I1 Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. P+ j: @# Q4 P( c5 c* n4 s+ h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 p  V% n6 R- t8 `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# _5 I( {& n) M5 m* L/ ]* R9 q
! I5 w+ u7 }' S4 ~3 r8 O, ?( S* h6 b8 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) g' ]* v. _: p/ H5 h. b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 j! @+ d+ }3 Q2 @" G3 j& k
    mcasp->regs->PFUNC      = 0;          // All MCASPs
( c0 O8 X+ H8 b8 ?. m4 n    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ f# U5 L: k6 _3 e
5 Y, O$ M% b& _0 W
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 H3 h) _! ~7 Y" C) D  u$ A/ p    mcasp->regs->DLBCTL     = 0x00000000; // Not used: y4 \* Q% D" `0 w: j& R
    mcasp->regs->AMUTE      = 0x00000000; // Not used  e# D0 F+ i; i5 \/ _) E0 v# c
5 M5 X4 W$ }/ \
/* Starting sections of the McASP*/( A! L9 c4 J0 k6 l; z/ d
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 l, p* j8 D% c# D% h6 U' `& Y& z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: t; F8 }: `4 G+ R# X) p    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) i3 ^9 m* H& E( @- T9 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ u8 Y. j% @1 {; P" K3 H

# k; m  P7 j+ z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ h; f1 r. o" L- n" \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" l6 p2 W! @( T7 h8 v" W# L- P
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 I0 ?* ]& ?; s2 d1 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 ?1 [' j0 s  u
& [! p. h& X1 F% B3 _
    mcasp->regs->XSTAT = 0x0000ffff; $ T1 Y( t3 [7 n/ f1 M6 F
    mcasp->regs->RSTAT = 0x0000ffff; 6 Z1 P) ^! R7 J. @4 x- J2 i
  `) r6 g6 W8 b- K4 }/ a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ q) v! d* v4 [! |& ?# f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 E7 ^9 h3 I) |
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % k5 ~# @2 m1 _* _) u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; X8 j: q5 w" `2 ]" [

! z# G$ g9 {& P# |$ ]1 X& |    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 w3 ~) }* ?! _    mcasp->regs->XBUF5 = 0;
* s/ u; T+ @! I% M/ l+ ]  _3 D    mcasp->regs->RBUF0 = 0;& R# n2 l6 v. v( W: g
# Y* v4 N! T6 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 i  K1 u2 r- \. ^6 B$ h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 M8 N- L; m, a9 s; m3 H9 b1 {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- d9 w8 \0 O2 u; Y) u' ^* X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. v# ?/ J! M4 x! Z" Y8 D' C
% O6 L& ~: E; {, d    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 c6 o( q5 X7 \1 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 r& ~. U1 i  V' m; u: E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 _  ?8 j8 h2 W4 Z0 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- P2 G# Q- n) T6 U+ F( I6 h/ Y. y( l9 N6 H
    CSR = 0x0000;; Y4 |& U) X# l+ X0 o
    INTC_INTMUX1 = 0x3d;
: I* \: v4 }, U, P( S; |    ISTP = (unsigned int)vectors;
1 [0 `! b+ z1 K, k- @; _& ^; x. j    ICR = 0xFFF0;  $ L8 f0 v$ N) P3 P& B# w# ^2 \
    IER |= 0x12;  3 g; ~2 j4 a6 U/ C3 U8 R% N/ m9 `
    CSR |= 0x01;    c3 g0 @' u1 S  I. I
. p, S; P( u) ?7 y

0 s( L. t6 o1 g$ t- O' q3 S0 |: i' v- _# e  E* k2 X( L( R) B8 C
还有就是两个输入输出函数:
! s- M8 {- B* [/ J- Ovoid output_sample(Int32 out_data)
9 n& m" H9 G; `! F{- q, i: B% K( c6 M: K
  AIC31_data.uint = out_data;  
* P) ?0 I; \% A4 U" X  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% }) y0 b) m- S& \}
) g9 H0 r: Q& p- _
1 d3 l/ J- F$ L$ k- y/ ], ]Int32 input_sample(void), }% p  n- E6 C8 O$ H6 }
{  
- H' h/ S' Y$ y  AIC31_data.uint = MCASP1_RBUF0_32BIT;. u1 [5 M" N9 ]9 F5 G2 I8 p6 @$ ]" s
  return (AIC31_data.uint);& L4 U2 v3 J/ `! {' u: s7 a
}
1 W+ p4 ~) ]& Q5 g7 @6 Z4 t, d" U# U, x
分享到:  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-7 23:04 , Processed in 0.038783 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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