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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 n8 |( d. u  D7 G/ t8 Z# E
main文件:
4 I; O8 r2 k( r: _% {/ iinterrupt void interrupt4(void)  
# ]% F  F0 X% K9 N" i& j" M: D{
9 I' M  d4 [1 v% g5 l  Uint32 sample;
$ e6 {9 q: V  M; f
* V% q$ h+ t$ |  sample = input_sample(); // read L + R samples from ADC
$ l+ ^6 w- w9 s  F  output_sample(sample);   // write L + R samples to DAC : W% ~  L* t( {7 C3 O( T
  return;' k  G7 t2 S7 b, d8 R9 J# G! @' ?/ A
}
7 ]( H, k1 M& y, N, I# z" [" ]! K: U
int main( void )
0 H* E' Y; \" {9 t+ W1 _2 i{2 _! T% R" j, D# T
8 v1 x* B$ k' V, K" L
    /* Initialize BSL */
+ p5 w5 e3 b) x' u    EVMC6747_init( );5 \1 t6 s: r3 V+ H% I
        /* Call evmc6747_intr function */
2 e4 \% g; u$ s5 V  `; Z) Z  w1 N# r    aic3106_init( );
# t# F8 |" [  k2 g; b. \" K$ l) G        while(1);
+ }. G9 x8 o$ v}" Q) i5 `! w7 f. \" e. l
1 N7 h0 \$ `+ A. v
* }' @4 }* n. V; r1 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& ]' J6 i! M0 H" c- H/* Initialize MCASP1 */7 E& Z) q. L0 O" ?; \3 v- s7 m
    mcasp = &MCASP_MODULE_1;
' f! S# z+ Z$ i/ E$ o+ ?    mcasp->regs->GBLCTL  = 0;       // Reset
$ }5 D! E2 T1 Y. T    mcasp->regs->RGBLCTL = 0;       // Reset RX
( y  @9 b: Z+ q    mcasp->regs->XGBLCTL = 0;       // Reset TX
" k# C0 ?1 c& ^  E% [1 a    mcasp->regs->PWRDEMU = 1;       // Free-running
- @/ h" \" C# h$ D' m3 X4 Q" l   // configure McASP0 receive registers
' a& N: B9 }2 t( |; N' [" y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: l; ?6 }* l8 c! |( `+ V    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  B4 S: \3 i8 v/ A% r9 s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ i! d5 [  t: e/ T4 g8 z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- d6 u3 ?1 U" l( F' r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! y# D: x2 r6 s$ E" G' ^! ?    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) {; Y" r( K" D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; P4 t& Y$ k9 [0 t3 C7 c, Q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 d% W# j5 {* s- n8 r7 o* y
2 E& w0 }" s: M9 G, T7 m    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 z3 |  K7 V7 b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& A' G" m' `/ z! C- p' \! u3 @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& I5 E1 ]3 z+ [* b7 P+ I/ W1 r2 s" P
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  N, d, v) A3 q2 u' b* d    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% [  U/ _5 j3 O% x5 B( g
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 r+ S% j/ D6 A$ M2 \' B1 v, n! ]( w
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( P" g; V0 x. h5 d9 O9 z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 c! Z- `. j6 c& S+ f8 I

1 U3 e7 u( |$ n8 T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 o- t8 \4 c5 _6 M    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; [  l' @# N' R! l, S
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 c, H/ G  T+ E1 k8 t. {( _% R; u    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' T& I; W& p; k' T4 F' c: |6 P; v7 q" O! _
    mcasp->regs->DITCTL     = 0x00000000; // Not used
$ h3 y# N- g( b0 b: w/ S4 t9 Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used- L. a/ v" o& A* H% g) E4 G
    mcasp->regs->AMUTE      = 0x00000000; // Not used: g0 ]2 W  B4 G* \; L- q
' ~; ^) _1 Q/ f2 u' g/ g
/* Starting sections of the McASP*/
( f" }& a9 Z0 |) c6 r, h& V    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 o: W' k. ~- ?8 U1 O) b5 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" c3 o6 g' U8 M% T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 y+ a- N# B+ I; u' j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. z) G. k6 C8 B9 }  }2 a' @+ f
7 _* L7 h. u3 x0 s* e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 @! a0 u5 g2 ~5 `( J% g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& @, p9 p  ~, m- T* a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 i2 s3 J% ]9 O2 t2 ]0 n  f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* B! J8 ~7 z8 s8 C  U" y& |% ~
9 G+ F2 r# a/ v: G+ X4 _6 p    mcasp->regs->XSTAT = 0x0000ffff; 7 ?; x$ l) N2 x; X4 {3 ]
    mcasp->regs->RSTAT = 0x0000ffff; 3 S5 E0 _5 r) `( X4 o
, F* `! u, Y$ d% Q( t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 M9 _4 J. P! L2 Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: k- B7 e; W, X6 Z' X+ U, t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% ~, M- M* W+ `9 k! U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  s4 _5 j. ?+ l/ Y! r: |$ ?* o- X; a, F: q, O/ A, T! B# R, m
    /* Write a 0, so that no underrun occurs after releasing the state machine */, S: y' [: }" X5 M( @1 {$ n: H" k, x
    mcasp->regs->XBUF5 = 0;+ Q6 n! v# h0 h2 c- D+ A$ l
    mcasp->regs->RBUF0 = 0;
5 X4 [3 u% ?+ J! @; ^& L
* b! B" A: Z! J5 h) m  U    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & Y7 U" r7 F* ]9 z: s; ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 P/ P5 ?" K$ m, f# z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 V. T, X1 [6 }( V5 ?7 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ]/ v9 b& W. v: D- }/ u

! `+ J' r- Z- e. [8 m% P' a; P! ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + O1 w% e  h9 {0 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 \. f! w% D5 y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 h4 m* c9 ^' V5 g% p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% m, v: g3 [/ P7 W$ W
- e0 {# x1 O7 q- ]! z
    CSR = 0x0000;8 T. E5 k; ~' P, b1 X* r7 X3 I
    INTC_INTMUX1 = 0x3d;- P1 t! h, k; o8 V6 g1 k
    ISTP = (unsigned int)vectors;
2 e2 t8 r# Q: F" L6 m6 i3 J    ICR = 0xFFF0;  
& k* J# }& B  _7 y  `3 k( t4 _    IER |= 0x12;  & {. b  f8 @! f! e8 v7 \
    CSR |= 0x01;  
" k2 D: `  r% x. a" y9 m' j# b, {! a" q; u% N( d' `

4 l) c: H( \2 ]! t
5 w6 A. ~0 y! y+ j还有就是两个输入输出函数:- x) N& L7 k, U  z# B& u9 O$ x: ~
void output_sample(Int32 out_data)
  t) j, f6 j9 h4 C; E7 l2 ^{; ^: w6 _* h! H* |1 i$ ?( z
  AIC31_data.uint = out_data;  & K. S% k! H: q% Z4 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' G9 K' J) k9 c2 a1 }! n) Q% @}
: w. F- o3 c! t6 k" d$ B) H, F. d9 m- f, I, A8 Y- o9 s
Int32 input_sample(void)
# m7 x4 O" u* g7 v2 v{  
! r; f% X: a& g4 m$ i- i- m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  m0 v2 q4 ]2 I, e5 `1 o9 S/ ]  return (AIC31_data.uint);
! X/ u2 l, J/ X2 s0 \# M4 ~5 x}) N* w% N' G+ V& Q/ U
1 k- e8 k) [& L1 [
分享到:  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-20 07:56 , Processed in 0.041821 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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