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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! R7 |. [# @7 y9 @4 q7 {
main文件:
; }" T( A& O/ z& Kinterrupt void interrupt4(void)  
- w/ u- b" ^% ?9 J5 M{# B; a! i0 r+ j# S
  Uint32 sample;
/ {  s: f9 Z$ d1 Q. s9 W/ b* c
0 b# `' Z  G: V; {  sample = input_sample(); // read L + R samples from ADC
2 K$ l- Q: M( B7 ~  output_sample(sample);   // write L + R samples to DAC 0 r5 l; {% }2 a0 q0 @, t' ?
  return;" O& b4 V# L8 f9 @& ~: ]- c
}1 k/ {5 L) R: ?0 I
) ~3 {0 K" v2 v7 W( u9 G
int main( void )
% ], O6 d  T3 `- N* o1 o4 u) `" Y5 @{  z; j  d& e6 s& [+ h) Y; b3 r
9 O1 W6 }+ Z" I& p  r- Q
    /* Initialize BSL */
5 x; T! V8 v7 S/ M- \    EVMC6747_init( );6 i/ \! l. T$ o5 I+ _6 q! z
        /* Call evmc6747_intr function */: v2 j) Z2 r" N3 Q$ W
    aic3106_init( );0 Z/ F. ^* p! o0 g6 K4 M
        while(1);
/ S0 `9 k+ |4 O' M}. l0 c  R+ E+ ?& `; B3 ~
  f1 X! J, L" q; \

% @5 e& v% t4 W2 F" O) C( |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 d  r& Y5 A1 j* f: w* l( ~/* Initialize MCASP1 */! C" a- a# s$ o" E" U' N* q& E) m: Y
    mcasp = &MCASP_MODULE_1;
2 Q, _- u% l/ s; S7 W) O4 Y    mcasp->regs->GBLCTL  = 0;       // Reset5 w+ f+ R" T- y0 f
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ }4 X# `8 H1 y9 M1 c9 \
    mcasp->regs->XGBLCTL = 0;       // Reset TX; Q: s% k8 D# Q" u% V
    mcasp->regs->PWRDEMU = 1;       // Free-running
# j" J, k2 U4 t; p0 C! i9 B6 `* w   // configure McASP0 receive registers
- g$ S7 ^: Y6 u5 a& T: q$ ]    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 O" L3 B( ~( j& _6 ~' a! J    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 d5 q$ }; @6 a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 W# J  e* k: b) c
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# u, H* _: C$ G. Q. \% d
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  E$ p' \$ q) o! m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* z* F5 A+ a1 f( K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' ]& O8 J& [8 R& Y; o, ^- f4 G. |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I. F7 s: G1 m
: k* f4 M4 r% v1 ^8 [& P$ m
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  W# J4 G6 w% }/ ?
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 b& q. ]7 F5 i; n4 {& U. I; j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: T0 Q: `. @$ T" J6 k) w( l3 a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% S0 V( Z5 y6 ^6 |: ~% O
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& [% X. r# e6 [6 V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, |: |) ]; g) |/ I$ _) r3 U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ q! V5 R1 h+ \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" C* t. M1 w5 _# P6 T) v$ _
& e) L# \# U1 ~5 L$ S3 u  H/ w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 B% e7 M3 c0 V# p! S% X' ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% n* D% g+ x4 a& [! `$ R    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 U# _0 |2 b  m9 i& r! D/ t. ]" {: y    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* E$ u9 p  }) N! D1 s; H. {

7 E* f+ K. y! G/ ~5 H9 `/ w! f    mcasp->regs->DITCTL     = 0x00000000; // Not used6 Q, {1 c9 N: D" e) t
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( t' a# O9 ^9 Q% t" }    mcasp->regs->AMUTE      = 0x00000000; // Not used; `8 d# `2 T0 b: e: B
" k( {% ?) N/ W# }! w; }- D
/* Starting sections of the McASP*/
, _- M/ j$ I' ]! s! n    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 }% x% d) B& o0 b" _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 W# G% _; d, v# n4 d- `- i/ d0 C    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 q' b' s' `/ z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# w6 r/ _; ?' q
" C- i* ~" W- C; T. r7 w    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 H8 }# B3 n, s$ _# f$ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 f* i6 d  D7 L: a& U; Q8 S
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 T9 I  m- H5 _% E( l7 O4 A3 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% D* h1 v) Z# q: M3 O3 P
; n* y7 ^9 C6 L+ x
    mcasp->regs->XSTAT = 0x0000ffff;
$ ]% ]  I' X1 z2 s+ p" T    mcasp->regs->RSTAT = 0x0000ffff; - P/ ~+ R( l' ~% N8 {
* J. R+ ?, y4 @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 N! t0 W' t% Y2 E* D, C: Q& B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& O9 V# f4 c7 Y# v* p7 o    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 n2 S# [4 N+ k, U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" ^$ P' n+ o. ?" [$ o9 D  r  Y- j" k
    /* Write a 0, so that no underrun occurs after releasing the state machine */( n% t8 {$ X$ l# z4 [3 y
    mcasp->regs->XBUF5 = 0;
' }) i4 d! p  }7 d5 h    mcasp->regs->RBUF0 = 0;$ W( P. w1 ]1 Y- t

! {' S# e5 T8 O: h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* w4 M( n4 Z- l6 d1 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' `8 t* n# F- s6 `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; * g/ t+ N" E1 v+ q; Y/ @  D+ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 x' l' h; \* A5 x$ Z0 T. g8 e& E5 B" ]  O8 q0 @$ C. Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 r; L& ^" k6 g* i8 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; d& d& P: O% y8 s5 p# `# N% M7 o
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ]% {) [- A% w; D3 I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) P. Z% Z% Y* l; t, _' L3 l
9 i" t' ]. ~9 L: A8 m( r
    CSR = 0x0000;% l1 T5 B0 H# J. R- _& E
    INTC_INTMUX1 = 0x3d;
9 f4 r+ z/ ~3 I" Z2 L, q8 I, J    ISTP = (unsigned int)vectors;
0 v' c# ?' M! Z$ O2 N5 h    ICR = 0xFFF0;  
$ R2 h  }, s+ m: B4 W% A    IER |= 0x12;  # K3 I3 z5 @8 Z3 C) ^" f
    CSR |= 0x01;  
9 {$ P$ f7 R+ v2 T! l  D) {2 A
7 a) K) t7 g9 `" u/ X- H5 }  a! _% P9 \. L* ?. b$ \

& N& r% k: d+ I* }* s还有就是两个输入输出函数:) z3 [$ X9 h) n6 H. U& g
void output_sample(Int32 out_data)" X* N! w. T! R! W* g4 V
{8 m; o5 Q9 B- c# E- J0 [0 |% q. n
  AIC31_data.uint = out_data;  
# @+ A, E' c5 m* }  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 x4 [0 x  F) h( R# @}" L" v: p" S, P0 n+ x! T4 p
- R" g; [5 b! s/ w, S
Int32 input_sample(void)8 {4 N8 S0 D5 ?4 \0 }4 J
{  
! E. K+ I/ Q2 W/ T* A/ q  AIC31_data.uint = MCASP1_RBUF0_32BIT;% ^7 T2 i1 A% k1 X& N
  return (AIC31_data.uint);# J) H. i* R4 w$ }9 [, z9 }
}
  Y. |5 A% X" T5 H9 b$ `- S# s- N) C! g  @! c  ?
分享到:  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-3 18:50 , Processed in 0.040058 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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