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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! M( q% o. {8 l* }- U
main文件:, O0 _% t$ \# O* V  X
interrupt void interrupt4(void)  
- S+ M- B/ r+ r{2 B- w; o; h4 q- Y
  Uint32 sample;1 o  L5 Q2 R: \7 z0 t4 z

% b! E# d2 b( t  sample = input_sample(); // read L + R samples from ADC
; b4 n3 \" z. E6 ]: V1 v: W. X4 b( M: m  output_sample(sample);   // write L + R samples to DAC
' f1 L  E5 W$ K5 c) E  return;$ k  s1 Y! G. R
}
5 d; k5 x  e' R7 x/ h9 S- ], I" e# x6 U$ w
int main( void )
) r8 M9 r& ]* n1 S5 p{
% U# k( [2 S) A& U
/ c+ U4 [/ X' f- T    /* Initialize BSL */
& [+ H) W- [2 W$ ^* r    EVMC6747_init( );* M5 t+ Q4 H4 ~" N' V- X3 ^& R8 ?3 V+ W
        /* Call evmc6747_intr function */0 A8 e4 K9 X+ ]1 ?8 ~* ?
    aic3106_init( );  ^. b' K+ }0 }
        while(1);
% {  p: t- f; b, T}
/ ?7 V  s2 `' Y9 N/ q  F7 U" p' Z# h0 V$ ?# x

7 d+ ^. Y) |( |! Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  A9 E2 z6 e1 G0 v: x2 t/* Initialize MCASP1 */
6 p% a) V  H1 `- V# |- [    mcasp = &MCASP_MODULE_1;
3 ~2 G: i. I$ J9 j# M    mcasp->regs->GBLCTL  = 0;       // Reset
$ I, r& l- j8 c- B+ s( L0 l    mcasp->regs->RGBLCTL = 0;       // Reset RX% s* ~, j; T3 z% j1 v: b
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 o8 u' R# H- q7 y& K4 j- \9 u    mcasp->regs->PWRDEMU = 1;       // Free-running
7 x' H( F8 j& d7 c8 s   // configure McASP0 receive registers
- T; @' [5 c; o* e( |" m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 B3 e3 D# w2 C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* d8 [: Z, W( O1 |# p% n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 E6 U5 v, O/ C4 q- T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 p$ n" Z7 M; s3 x3 h! m' i
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# r- C8 k4 `! x4 l' ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: B) V5 m$ o6 T  [  b+ l# a9 F$ ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
% O" l( M: S$ D2 S    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ h: |5 c; s& ?" i

5 A  V% L2 H5 R! o1 `    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) @% H% R( Y% {$ S) e7 s8 v    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 N) M9 m' s, J/ u
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) `" ?  o9 o9 v- Y6 i3 @7 c
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' t' z. l- V* x  j; p1 P! P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" H" Z. T( _1 B  b- n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, ~: \- }6 N; ~% m9 ?9 P- G4 H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" b; o  n( ^+ r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! q$ }! w- |! a( x$ o/ w9 {$ Y5 U9 x% {. e( g  M9 ]( G/ ~$ q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 {4 c1 J4 D" d; m. y" x& k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! m: G* m* m) n+ j
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 d- O' D! Q7 x, t1 |
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 h7 x3 U2 H' }% l. k: t) O
) x, l& W& p7 g  z% m& [8 {" \7 o
    mcasp->regs->DITCTL     = 0x00000000; // Not used* x4 W3 F% U. K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used8 q" ?2 D. T7 J3 B3 W
    mcasp->regs->AMUTE      = 0x00000000; // Not used& ?5 ]( S" T8 x# C# {7 S6 C

  z, i" t5 H% U+ @8 T" {/* Starting sections of the McASP*/
8 `5 _! i- C( u- \. h3 N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 H* m( }" T7 A4 B. I# l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 V9 n$ I$ q7 ?1 s9 Z) {. d* B    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' ?/ L" b' [. ~# }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" W  o& B# A, m. d

$ H+ K  g" [, X$ {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 u' G& F4 H& {  w1 K! J, O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. {: l0 T2 ]0 t, X+ p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 g# ?7 m+ e7 M9 s5 i# C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- W, ^) j( W2 h/ g) x: Y

! {; {7 e  M+ ?' q! ?/ W    mcasp->regs->XSTAT = 0x0000ffff; ; r' r' n: p. Q7 {& K% w' V* E8 F
    mcasp->regs->RSTAT = 0x0000ffff;
" R+ ^" l. T+ V2 Q8 n0 l2 S4 u0 Q: N# t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 l& ?5 }, O3 \5 L: E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' Q: {! W  R0 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 ~# K3 S; T4 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );, k. Q% h3 J0 Z7 b4 X" h/ @
9 k+ m! C  p2 @0 b! ~% o) e, M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 u4 l; [4 o; y0 i$ I% H    mcasp->regs->XBUF5 = 0;
1 k' }" u* p6 h; E  M1 H6 B/ ^    mcasp->regs->RBUF0 = 0;' c2 ?, o3 T6 v$ A

. `" q$ f; |$ S" g# J  L    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
; n; O7 ?; e  b! C4 g' h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' J! ?5 O9 r* J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. {9 j: X, T, ?5 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* v$ }, i7 R1 u; t1 i$ u. N2 I% `$ V  R# {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! a- S. A$ o& k8 r" o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 c; f9 e8 ?' f# d2 H1 o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - M7 ?7 I% j9 {0 Z& R* {( d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 x( k0 @  Y0 q/ q6 D9 w2 ]1 p" a
: a0 x8 T6 X7 ~; [: q    CSR = 0x0000;0 M2 r# _0 ?9 V8 m( i. c) r
    INTC_INTMUX1 = 0x3d;% d2 I) F. q( W. {; i& t+ k
    ISTP = (unsigned int)vectors;
8 i# G* B+ X6 B% `    ICR = 0xFFF0;  8 p) Y$ s- j- j5 v( a4 ^
    IER |= 0x12;  
1 ^* i5 G2 X0 J+ T( h0 l. ?. c( j    CSR |= 0x01;  1 k* s. \0 L# T

4 n8 \2 Q3 {- j: D5 S: S' Y
9 w* Z+ o6 ]' m1 u# t: q
( Z! d( b+ t$ S$ x) a0 [8 c% I/ {8 G还有就是两个输入输出函数:8 ?4 b1 l+ n0 F' h) F" ?5 L; l7 v+ X1 H
void output_sample(Int32 out_data)
# d1 D8 U. n2 M5 v" H{' I, Q% l) }2 g$ O4 P9 B
  AIC31_data.uint = out_data;  
4 h1 {; p3 I) Y* `# P  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 r* F: J& }! \* E) R+ d, L: G}
8 ~, [  _3 W$ J. E1 R
2 X( [6 h( I4 P3 q) pInt32 input_sample(void)7 E' S/ c9 \1 g
{  
. M- I& ^7 O. g- X' j  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 F2 R0 M! K9 \$ V' q+ P3 c
  return (AIC31_data.uint);
( m6 i* E2 x9 V; S& S. \1 p& f}
; _# J) X9 j* P( y0 R4 Q
  F. H. f  s( @( a+ f: D& _
分享到:  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-10 02:28 , Processed in 0.041433 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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